asp.net - 我的服务层中的服务是否应该位于单独的项目/DLL/程序集中?

标签 asp.net asp.net-mvc-3 soa service-layer

我目前正在开发一个 ASP.NET MVC 3 应用程序。我正在实现一个服务层,其中包含业务逻辑,并由 Controller 使用。服务本身利用存储库进行数据访问,存储库使用 Entity Framework 与数据库通信。

所以从上到下是: Controller >服务层>存储库(每个服务层依赖于单个可注入(inject)存储库)> Entity Framework >单个数据库。

我发现自己正在制作诸如 UserService、EventService、PaymentService 等项目。

在服务层,我将具有以下功能:

  • ChargePaymentCard(int cardId, 小数金额)(部分 支付服务)
  • ActivateEvent(int eventId)(EventService 的一部分)
  • SendValidationEmail(int userId)(UserService 的一部分)

此外,作为我使用此服务的第二个地方的示例,我有另一个作为计划任务运行的简单控制台应用程序,它使用其中一个服务。还有即将推出的第二个 Web 应用程序,需要使用其中的多个服务。

此外,我希望我们对拆分事物(例如我们的单一数据库)持开放态度,并愿意转向面向服务的架构,并将其中一些分解为 Web 服务(可以想象,甚至是有一天会被非 .NET 应用程序使用)。我一直在密切关注可能会减轻向 SOA 飞跃的痛苦的步骤。

我已经开始为每个服务创建单独的程序集(DLL),但我想知道我是否开始了错误的道路。我试图保持灵活性并保持松散耦合,但是这条路径对我有帮助吗(面向 SOA 或一般情况),还是只是增加了复杂性?我是否应该创建一个包含整个服务层的单个程序集/dll,并在需要使用任何服务的地方使用该单个程序集?

我不确定我要开始的路径的含义,因此我们将不胜感激!

最佳答案

IMO - 答案是这取决于您应用程序的很多因素。

假设您正在构建一个不平凡的应用程序(即不是学习 SOA 的大学/业余爱好项目):

  • 用户服务/事件服务/支付服务 -- 创建自己的 DLL 并将其公开为 WCF 服务(如果有多个应用程序使用该服务,并且将 DLL 共享给不同的应用程序风险太大
    -- 这些服务之间不应该相互依赖,并且应该专注于各自的领域
    -- 注意:这些服务可能共享一些通用服务,例如日志记录、身份验证、数据访问等。

  • 创建合成服务 -- 该服务将跨所有其他服务进行调用组合
    -- 例如:如果您已下订单,业务流程为下订单 > 确认用户存在(用户服务) > 引发 OrderPlaced 事件(事件服务) > 确认付款(支付服务)
    -- 所有此类服务调用组合都可以在这一层处理
    -- 同样,根据环境,您可以选择将此服务公开为其自己的 DLL 和/或将其公开为 WCF
    -- 注意:这是唯一一个将共享对其他服务的引用的服务,并且将成为单点组合

现在 - 使用此布局 - 如果您想单独与该服务交互,您将可以选择直接调用服务;如果您需要需要不同服务的业务工作流程,则需要调用组合服务组成以完成交易。

作为起点,我建议您阅读任何有关 SOA 架构的书籍 - 它将有助于澄清许多概念。

我试图尽可能简短,以使这个答案有意义,有很多方法可以做同样的事情,这只是其中一种可能的方法。

HTH。

关于asp.net - 我的服务层中的服务是否应该位于单独的项目/DLL/程序集中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418186/

相关文章:

c# - 从 NameValueCollection 读取结构

c# - 使用数据注释限制 DateTime 值

asp.net - 单选按钮而不是 mvc 3 应用程序中的下拉列表?

asp.net - 如何为 HttpHandlers 禁用请求验证?

c# - OpenHtmlToPdf 访问被 ASP.NET 拒绝

c# - 写入头部,但不是通过 _Layout.cshtml

asp.net-mvc-3 - Jquery Ajax Post 没有调用操作方法

web-services - 使用 Soap 请求发送客户端证书和授权 header 的理想方式是什么

wcf - WCF将如何扩展到大量客户端用户?

java - ESB 与服务