【问题标题】:Business layer, Service layer and 3-tier architecture业务层、服务层和三层架构
【发布时间】:2014-04-13 08:17:27
【问题描述】:

我想获得一个三层架构:UI

我的 DAL 是一个“超级”对象,可以处理不同的数据库技术,如 sql server、mysql、ecc..

这就是我认为的业务逻辑层:

/// <summary>
/// Customer entity
/// </summary>
public class Account
{
    public String Username;
    public String Email;
}


public class AccountService<T>
    where T : Account
{

    IEntitymanager entityManager;

    public AccountService(IEntitymanager entityManager)
    {
        this.entityManager = entityManager;
    }

    public void Register(T account, 
                         String confirmPw, 
                         String verificationEmailBody)
    {
        // Validate parameters...
        // Check email uniqueness...
        // then write  account to db...
        if (entityManager.Save<T>(account))
        {
            // Send verification email whit GUID
        }
    }

    public void Verify(String guid)
    {
        T account = entityManager.Get<T>(new Parameter("Guid", guid));
        // Verify account
    }
}

现在我对此有一些疑问:

  • 这是业务层的示例还是服务层或 什么?
  • 在业务逻辑中验证输入是否正确?
  • 在注册方法中,帐户是在哪里创建的?在 UI 层创建是否正确(从输入表单中读取值,创建帐户对象并将其传递给 Register)?
  • 我的 BLL 可以通过 entityManager 访问 Db 是否正确?
  • 如果我想使用这种 BLL 构建客户端和 Web GUI,我需要其他层吗?

【问题讨论】:

    标签: architecture business-logic


    【解决方案1】:

    您可以通过实现存储库模式来实现对多个 RDBMS 技术的支持,即每个 RDBMS 数据访问组件可以实现的一组通用接口。

    您的业务逻辑被隔离到一个单独的类中,但如果您不通过边界(即使用 SOAP 或 REST)公开它们,那么您实际上并没有服务层。并非每个应用程序都需要服务层。这将取决于您的要求和系统的预计未来增长。

    验证可能具有挑战性。如果系统的输入仅来自 UI,那么 UI 中的验证就足够了。但是,如果您有一个服务层,那么您可能还需要将一些验证复制到业务层。

    您可能需要参考这篇文章以更好地了解分层架构 http://serena-yeoh.blogspot.com/2013/06/layered-architecture-for-net.html

    您也可以从这里下载示例实现 http://layersample.codeplex.com/

    【讨论】:

    • 如果 mvc 客户端应用程序需要通过 nuget 包与第 3 方 REST 服务交互,并通过服务引用与第 3 方 Web 服务交互。那么如何实现分层架构呢?我想在 mvc 客户端中添加 REST 包和 Web 服务引用是一个糟糕的设计?
    猜你喜欢
    • 2023-03-25
    • 2011-06-16
    • 2023-03-27
    • 1970-01-01
    • 2017-07-05
    • 2014-07-18
    • 1970-01-01
    • 2011-05-05
    • 2016-08-11
    相关资源
    最近更新 更多