2011-09-22 116 views
7

我去参加了一次采访,并被要求显示我的业务层架构。我对3层架构有一些想法,但对于在面试官面前写什么,我真的不知道。 假设我的项目涉及一个组织的员工,那么我会在那里写些什么。它会是我应该做的任何一种图表或者一些编码部分。我曾在C#framework 3.5中工作。我真的不明白在这个问题中还提到了什么,所以请让我知道是否需要什么东西。谢谢。三层架构中的业务层

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

+0

是否只显示您的业务层架构?是不是有一些背景?他有没有明确地问过你三层架构?如果没有上下文,你会被问到这个问题,你应该回答你有不同的架构适合不同的场景。 –

+1

Isnt面试过了还是会有第二轮? :-) –

+0

@Darin:他让我出现3层架构 – Sandy

回答

17

一个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处理所有访问数据库,我hav即处理2个版本的服务的EA 服务层,旧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()将提供正确的结果。

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

我也有一个帮手,它包含我在所有项目中使用的所有Business Objects

我希望它有帮助。

+2

层与层之间有区别,我想在上面,他们已被互换使用 – Raghav

+1

[“** ...层是图层的物理部署**”](http://venkataspinterview.blogspot.com/2011/03/what-is-difference-between-layers- and.html) – balexandre

1

3方法是如下,

  1. 你在一个层中的介绍。
  2. 您的应用程序逻辑位于其他层 - 称为业务层。
  3. 您的数据访问第三层中的类。 - 称为数据层。

Web表单将表现层 所以对于员工类隐藏文件ASP.Net代码做任何事情,你所申请使用的if/else等等业务规则可以按我的理解被认为是业务层。 App_Code文件夹中的数据访问类将是数据层。

如果是桌面应用程序,表单设计将是表示层,表单代码将是业务层,任何与访问数据库相关的东西都将是数据层。

3

这里查看我的答案在许多项目有效的一个例子,即使用户界面是不是asp.net的MVC ...

MVC3 and Entity Framework

+2

谢谢...好文章 – Sandy

0

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

0

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

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