3层架构中的业务层

时间:2011-09-22 06:21:26

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

我去接受采访,并被要求出示我的业务层架构。我对3层架构有一些了解,但实际上不知道在面试官面前写什么。 因此,假设我的项目涉及组织的员工,那么我会在那里写什么。它是我应该制作的任何一种图表还是一些编码部分。我在C#framework 3.5工作。我真的不明白这个问题还有什么要提,所以如果需要的话请告诉我。谢谢。

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

6 个答案:

答案 0 :(得分:19)

3层架构由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;
    }
  }
}

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

enter image description here

PL 是所有公开的服务,我的 DAL 处理对数据库的所有访问,我有服务层处理2该服务的版本,旧的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()会得到正确的结果。

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

我还有一个帮助程序,其中包含我在所有项目中使用的所有 Business Objects

我希望它有所帮助。

答案 1 :(得分:3)

在这里查看我的答案以获取在许多项目中有效的示例,即使UI不是asp.net mvc ...

MVC3 and Entity Framework

答案 2 :(得分:1)

3层如下,

  1. 您在一个图层中的演示文稿。
  2. 您的应用程序逻辑在其他层 - 称为业务层。
  3. 您的第三层数据访问类。 - 称为数据层。
  4. Webforms将是表示层 因此,对于员工类在ASP.Net中执行任何操作后面的文件代码可以被视为业务层,因为您正在使用if / else等应用业务规则。 App_Code文件夹中的数据访问类将是数据层。

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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

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