c# - 正确使用存储库/服务类

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

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

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

访问

获取 RMA 的代码是否位于 RMARepository 类中,使用类似 GetRMA(int RMAId) 的方法,RMARepository 是否应该遵循单例设计模式?

而如果 RMA 已更新,即 Item 正在检查并等待接受报价,这是在调用 RMARepository 以提交更新的服务类中完成的。 IsExists(int RMAId) 是在这个服务类中还是在存储库中?

我熟悉演示 - 应用程序(逻辑) - 数据访问 - 数据(数据库)架构,也熟悉 MVP。但我确实想知道 Service 类适合的位置。

最佳答案

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

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

一个服务类可以使用多个存储库来实现想要的结果。在这一层中,您还可以拥有一个事件系统,该系统允许一个服务在另一个服务生成事件时采取行动。

例如,UserService 调用 FeedService 为每个新创建的用户创建一个新的 RSS 提要项。

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

关于c# - 正确使用存储库/服务类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5015925/

相关文章:

design-patterns - 通过数据访问层处理多个数据库的设计模式?

java - 您会推荐哪种 Java 服务或守护进程框架?

java - 如何在 Spring 中使用 JPA 存储库从服务器检索 blob

c# - 处理需要是字符串的枚举的好方法是什么

c# - RavenDB 中的 Map/Reduce 抛出 InvalidOperationException

ios - 动画如何进行单元测试?

java - 为什么我出乎意料地能够创建我的单例类的多个实例?

android - 启动后,崩溃

c# - 在多个项目中使用相同的类

c# - 如何使用 Activator.CreateInstance 创建运行时 T 未知的 List<T>?