正确使用存储库/服务类

时间:2011-02-16 11:37:06

标签: c# design-patterns service domain-driven-design repository

我正在开发一个相当轻量级的客户端应用程序(.Net中的桌面应用程序,因为将来可能需要连接到其他应用程序),以便为工程师跟踪业务中的RMA,工程师将查看和更新​​应用程序中的状态,客户将在网站上创建/查看RMA。

我想知道我对服务和存储库类的预期用法是否正确。 Web服务以JSON格式提供数据,我可以从中构造RMA对象。此网络服务由http://myRMA.com/repairs/2234/RMA.JSON

访问

使用类似RMARepository的方法让代码使用GetRMA(int RMAId)类来获取RMA,并且RMARepository是否应遵循单例设计模式?

如果RMA已更新,即项目正在检查并等待报价接受,则在服务类中完成此操作,该服务类调用RMARepository以提交更新。 IsExists(int RMAId)是否在此服务类中或位于存储库中?

我熟悉Presentation - 应用程序(逻辑) - 数据访问 - 数据(数据库)artitecture,以及MVP。但我确实想知道Service类适合的位置。

1 个答案:

答案 0 :(得分:11)

存储库类仅用于访问和存储数据库中的信息。他们应该没有其他逻辑。

服务用于从数据源(很可能是存储库)获取信息,处理信息并将结果返回给调用者。

服务类可以使用多个存储库来实现所需的结果。在此图层中,您还可以拥有一个事件系统,该系统可以允许一个服务在另一个服务生成事件时执行操作。

一个例子是UserService调用FeedService为每个新创建的用户创建一个新的RSS feed项。

Repository层可以用ORM表示,例如nhibernate。