【问题标题】:Correct use of Repository / Service Classes正确使用存储库/服务类
【发布时间】:2011-06-28 07:20:25
【问题描述】:

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

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

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

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

我熟悉 Presentation - Application (Logic) - Data Access - Data (Database) artitecture,也熟悉 MVP。但我确实想知道Service 类的位置。

【问题讨论】:

  • 实际上我知道我需要实现什么,甚至知道如何实现它,但需要知道在这种架构风格中放置功能时应该划清界限。

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 表示层中想要显示 RMA 详细信息的控制器/演示者会调用一个服务类,该类将调用转发到一个或多个存储库以创建所需的对象,这是否是一个公平的评论。 IE。视图/控制器/模型从不接触存储库类。
  • 是的。这是正确的方法。它使扩展应用程序和测试它们变得容易。
  • @jguffin,干杯,我的设计不适合。您是否碰巧知道任何定义服务的 godo 阅读材料,即我应该在其中放入多少内容。
  • 不。我的服务中通常有授权 (CAS)、BO 验证 (ShureValidation/DataAnnotations) 和日志记录 (nLog)。当然还有构建/处理业务对象的逻辑。请记住,在服务中使用 Save(myBusinessObject) 方法可能会使以后扩展应用程序变得困难。最好有IncreateTaxAttachToGroup 等方法。Save 方法有点过于笼统(在大多数情况下)
  • @jgauffin 如果我有一项服务需要拆分成多个文件来完成大量工作,该怎么办?我在哪里保存这些文件?假设我有项目MySolution.Services。我应该为额外的文件创建新项目并将MyService.cs 放在MySolution.Services 中还是只是在MySolution.Services 中添加一个新文件夹?
猜你喜欢
  • 2019-01-29
  • 1970-01-01
  • 2023-03-25
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2015-03-04
相关资源
最近更新 更多