【问题标题】:Business Layer in 3 tier Architecture三层架构中的业务层
【发布时间】:2023-03-25 11:33:01
【问题描述】:

我去面试了,被要求展示我的业务层架构。我对 3 层架构有一些想法,但真的不知道在面试官面前写什么。 所以假设我的项目涉及一个组织的员工,那么我会在那里写什么。它会是我应该制作的任何类型的图表还是一些编码部分。我在 C# 框架 3.5 中工作。我真的不明白这个问题还有什么要说的,所以如果需要的话,请告诉我。谢谢。

编辑 我在winforms工作。 我知道业务层是什么,但不知道该告诉面试官什么,因为业务层有代码,显然我的项目有点大,所以代码数量很大。那我应该在那里写什么??

【问题讨论】:

  • 只有Show up your Business layer architecture 的问题吗?没有上下文吗?他是否明确询问过您有关 3 层架构的问题?如果没有上下文您被问到这个问题,您应该回答说您有针对不同场景的不同架构。
  • 面试是不是结束了还是要第二轮? :-)
  • @Darin:他让我展示 3 层架构
  • @Davide:不幸的是它结束了:-(

标签: n-tier-architecture 3-tier business-logic-layer


【解决方案1】:

三层架构由 3 个主要层组成

  • PL 表示层
  • BLL 业务逻辑层
  • DAL 数据访问层

每个顶层只询问下面的层,从不看到它上面的任何东西。

当他们问你你将如何构建你的 BLL 时,你可以这样写:

namespace Company.BLL
{
  // let's create an interface so it's easy to create other BLL's if needed
  public interface ICompanyBLL
  {
      public int Save(Order order, UserPermissions user);
  }

  public class Orders : ICompanyBLL
  {
    // Dependency Injection so you can use any kind of BLL 
    //   based in a workflow for example
    private Company.DAL db;
    public Orders(Company.DAL dalObject)
    {
      this.db = dalObject;
    }

    // As this is a Business Layer, here is where you check for user rights 
    //   to perform actions before you access the DAL
    public int Save(Order order, UserPermissions user)
    {
        if(user.HasPermissionSaveOrders)
            return db.Orders.Save(order);
        else
            return -1;
    }
  }
}

作为我正在创建的项目的一个实例:

PL 都是公开的服务,我的 DAL 处理对数据库的所有访问,我有一个处理 2 个的 Service Layer服务的版本,旧的 ASMX 和新的 WCF 服务,它们通过 Interface 公开,因此我可以轻松地即时选择用户将使用的服务

public class MainController : Controller
{
    public IServiceRepository service;

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        ...

        if (thisUser.currentConnection.ws_version == 6)
            // Use old ASMX Web Service
            service = new WebServiceRepository6(url, ws_usr, ws_pwd);

        else if (thisUser.currentConnection.ws_version == 7)
            // Use the brand new WCF Service
            service = new WebServiceRepository7(url, ws_usr, ws_pwd);

        ...

    }
}

在上面的代码中,我只是简单地使用依赖注入来分离另一层的知识,因为在这一层(表示层,因为这是 MVC 项目中的控制器)它不应该关心如何调用服务并且用户使用ServiceA 而不是ServiceB... 它需要知道的是调用IService.ListAllProjects() 将给出正确的结果。

你开始划分提议,如果服务连接出现问题,你知道这与表示层无关,它是服务层(在我的情况下),它很容易修复并且可以轻松部署一个新的@987654329 @ 而是再次发布整个网站...

我还有一个助手,它包含我在所有项目中使用的所有 业务对象

希望对你有帮助。

【讨论】:

  • 层和层之间是有区别的。我认为在上面,它们可以互换使用。
  • MVC模式的Controller中是否经常使用业务逻辑?以 Web 开发为例,每个网页都有一个控制器来“绑定”模型中的实体,所以我可以在控制器中使用辅助类和服务层来处理和显示?
【解决方案2】:

3层如下,

  1. 您的演示文稿在一层中。
  2. 您的应用程序逻辑在其他层——称为业务层。
  3. 您在第三层的数据访问类。 ——称为数据层。

Webforms 将是表示层 因此,根据我的理解,对于在文件后面的 ASP.Net 代码中执行任何操作的员工类,当您使用 if/else 等应用业务规则时,可以将其视为业务层。 App_Code 文件夹中的数据访问类将是数据层。

在桌面应用程序的情况下,表单设计将是表示层,表单代码将是业务层,与访问数据库相关的任何内容都将是数据层。

【讨论】:

    【解决方案3】:

    业务逻辑被定义为与应用程序数据的检索、处理、转换和管理有关的任何应用程序逻辑;业务规则和政策的应用;并确保数据的一致性和有效性。为了最大化重用机会,业务逻辑组件不应包含特定于用例或用户故事的任何行为或应用程序逻辑。业务逻辑可以进一步细分为以下两类:

    • 业务流程。在 UI 组件从用户那里收集到所需的数据并将其传递给业务层之后,应用程序可以使用这些数据来执行业务流程。许多业务流程涉及必须以正确顺序执行的多个步骤,并且可能通过编排相互交互。业务工作流定义和协调长期运行、多步骤的业务流程,并且可以使用业务流程管理工具来实施。它们与业务流程组件一起使用,这些组件实例化并在工作流组件上执行操作。
    • 业务实体 业务实体实体,或者更一般的业务对象,封装了在您的应用程序中表示真实世界元素(例如客户或订单)所需的业务逻辑和数据。它们存储数据值并通过属性公开它们;包含和管理应用程序使用的业务数据;并提供对业务数据和相关功能的有状态的编程访问。业务实体还验证实体中包含的数据并封装业务逻辑以确保一致性并实现业务规则和行为。

    【讨论】:

      【解决方案4】:

      负责所有业务逻辑的业务层。例如 你有 Organizarion 所以组织和收集员工。 在员工对象中需要实现一些限制或一些规则。 该规则将在这一层实现。

      【讨论】:

      • 我投了反对票,对不起。我认为这个答案没有提供足够的信息。请扩大一点。可以举一些例子吗?
      【解决方案5】:

      三层架构是一种软件架构,由逻辑计算的三个“层”或“层”组成。它们通常在应用程序中用作特定类型的客户端-服务器系统。 3 层架构通过模块化用户界面、业务逻辑和数据存储层为生产和开发环境提供了许多好处。

      业务逻辑层:业务逻辑是管理最终用户界面和数据库之间通信的编程。业务逻辑的主要组成部分是业务规则和工作流。

      作为表示层和 DAL 之间数据交换的中介的业务逻辑层 (BLL)。在实际应用中,为了简化项目结构,BLL 应该作为一个单独的类库项目在 App_Code 文件夹中实现。下面说明了表示层、BLL 和 DAL 之间的架构关系。

      BLL 将表示层与数据访问层分开并强加业务规则

      【讨论】:

      • 你描述的业务逻辑层听起来应该理解表示层以便管理与它的通信。 业务逻辑层应该与客户端应用程序(Web、桌面、移动)无关,并简单地定义此类应用程序与其交互的方式。
      猜你喜欢
      • 2014-04-13
      • 2011-06-16
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 2020-09-21
      • 2014-07-18
      • 2023-03-27
      • 2013-06-06
      相关资源
      最近更新 更多