这更像是一个设计模式问题,所以没有代码和很多单词,请耐心等待。我正在编写业务应用程序(在C#中,使用WinForms)。有一个POCO风格的对象代表用户当前正在处理的数据集 - 一个包含所有相关数据的“文档”。
业务操作在应用层中的一组管理器中实现,每个管理器负责其自身的应用程序方面。 其中一个方面是重新计算在对象数据中持久化的某些摘要。管理人员知道对数据的哪些操作可能需要重新计算并在适当的时间调用它们。
GUI(WinForms)部分负责将用户的交互转换为对应用程序层的调用。假设您单击Add按钮,click事件将找到ObjectListManager类并调用manager.AddObject(...)。由于ObjectListManager知道这需要更新摘要,因此确保重新计算(通过在内部调用其他一些管理器)。
我想知道的是这个。我需要我的GUI来刷新表单上的摘要。我的第一个冲动是设置一个委托占位符(在哪里?!),注册一个GUI级方法作为该回调的委托,并让应用层调用此方法。但我不确定这与我想要保持的业务操作的抽象是否相矛盾,以保持它们与GUI层无关。 另一方面,另一种方法是将其构建到GUI级别对用户交互的响应中,即单击Add按钮应该知道在调用manager.AddObject()之后,它应该查询重新计算的数据并将其呈现在GUI。
我缺乏一些经验/知识,无法弄清楚如何正确设计。 答案的长版可能是读完“四人帮”一书,但如果现在有人能提出好的实用建议,我们将非常感激。
答案 0 :(得分:1)
在这里阅读M.Fowler的文章后:http://martinfowler.com/eaaDev/SeparatedPresentation.html
还有一些关于在这里实现Observer模式的文章 http://www.codeproject.com/Tips/769084/Observer-Pattern-Csharp 和这里 http://www.codeproject.com/Articles/88278/Observer-in-NET-with-IObserver-T
我最终实现了一个简单的观察者模式,我的数据模型作为主题(在基类中实现),表单作为观察者。
根据我个人的喜好,它有点使数据对象比POCO更多,但是嘿,如果它对Martin Fowler来说足够好......