Design patterns 我的DAO层如何与表示层交互?
我读了这本书,想找一本。如果您觉得这个问题仍然太长或不清楚,请让我知道,我会再试一次 我维护一个具有以下层/设计的N层业务线winforms应用程序:Design patterns 我的DAO层如何与表示层交互?,design-patterns,architecture,separation-of-concerns,Design Patterns,Architecture,Separation Of Concerns,我读了这本书,想找一本。如果您觉得这个问题仍然太长或不清楚,请让我知道,我会再试一次 我维护一个具有以下层/设计的N层业务线winforms应用程序: [WinForm应用程序] [基于MVP的表示层(CAB, 具体地说)] [服务层] [数据访问层] 应用程序通过使用特定于ERP/业务系统的DAO接口实现,与不同的ERP/业务系统集成,这些系统在DAO层处理,例如: public sealed class QBTransactionAssemblyBuildDAO : QBDAO, ITr
- [WinForm应用程序]
- [基于MVP的表示层(CAB, 具体地说)]
- [服务层]
- [数据访问层]
public sealed class QBTransactionAssemblyBuildDAO : QBDAO, ITransactionAssemblyBuildDAO
public sealed class SAPTransactionAssemblyBuildDAO : SAPDABase, ITransactionAssemblyBuildDAO
例如,一个业务部门可以使用与QuickBooks集成的应用程序。这将在app.config中配置,工厂方法将在运行时创建适当的QB*DAO实现。同样,另一个部门可能会使用它与SAP集成,配置文件将支持这一点,工厂将生产SAP*DAO实现。然后,这些服务可以使用DAO,而不知道底层的集成系统
这一切都非常有效,事实上,由于我不得不添加额外的集成系统和记录支持,该设计已经收到了回报。今天,当我遇到一个集成应用程序的API不支持所有其他系统都能支持的任务的情况时,这一切都改变了。我现在的情况是,我需要支持异常流,而不是更新SAP中的数据,我需要向用户提供一个对话框,其中包含数据,以便他们手动转录(确定、复制和粘贴)到SAP应用程序用户界面
如果我遵守我的层和对象分离准则,那么我第一次分支应用程序流的机会是在服务层,因为该层了解集成了哪些ERP/业务应用程序。在服务层,我可以接收到“recognizedDelayedRevenue”的请求,获取我对具体DAO对象的引用,并询问它是否支持该操作(后一部分是新的)。如果它返回负数,我现在面临的设计挑战是向用户呈现一个对话框,包括使用属于DAO对象的方法预处理它呈现的数据
我的问题:从设计的角度来看,哪个是更大的罪恶:
if (myImpl is IAdditionalFeatureAware)
{
// ...
}
我是Fowler的粉丝,但角色界面以前并没有引起我的注意;谢谢你的链接。我正在努力研究如何将您的建议应用到我的3个参与层:将(或不将)实现角色接口的对象将是我的DAO对象,这对于表示层来说是未知的。您将如何让服务层参与此解决方案?我的服务声称要处理这个问题所涉及的任务,但直到它尝试使用DAO层,它才能检查角色接口。我希望这是有道理的。对我错过了那个细节。这使得它更加复杂,因为服务可能支持在接口用作堆栈的本机部分时查询接口,但如果它成为或是远程接口,则需要询问服务是否支持该功能,并作为响应的一部分获取答案。你也许可以这样做一次,然后抓住答案,而不是不断地询问?