C# BLL、DAL、OBJ和三层体系结构

C# BLL、DAL、OBJ和三层体系结构,c#,architecture,data-access-layer,layer,bll,C#,Architecture,Data Access Layer,Layer,Bll,我的问题是关于三层架构 我的项目大致如下所示,但让我恼火的是,在我在数据库中插入一个新列后,我必须更新除BLL之外的所有字段。在表示层中,我创建了一个OBJ,在DAL中,还有一个SQL查询。我必须手动更新所有这些字段 如果我以“正常”的方式进行操作,我会将所有这些内容放在表示层中,并在一个地方进行更新 我是否正确地应用了这个3层架构,使用这个分层架构的优势是什么 我的第二个问题是: 在DAL内部,我通过_视图收集数据。我想知道的是,我应该为每个视图编写另一个BOboj吗?我已经有了一个BOboj

我的问题是关于三层架构

我的项目大致如下所示,但让我恼火的是,在我在数据库中插入一个新列后,我必须更新除BLL之外的所有字段。在表示层中,我创建了一个OBJ,在DAL中,还有一个SQL查询。我必须手动更新所有这些字段

如果我以“正常”的方式进行操作,我会将所有这些内容放在表示层中,并在一个地方进行更新

我是否正确地应用了这个3层架构,使用这个分层架构的优势是什么

我的第二个问题是:

在DAL内部,我通过_视图收集数据。我想知道的是,我应该为每个视图编写另一个BOboj吗?我已经有了一个BOboj类,但它不包含所有字段

当插入数据时,我必须使用我的BOboj,然而,当列出数据时,我使用的是视图,在这种情况下,我应该为每个视图或其他什么创建另一个BOboj_视图类吗?? 最简单的方法是什么

比如,; 我有20个视图和40个类映射到sql server上的每个表,我的视图收集不同表的数据(这意味着不同的对象)。除了40个表示视图的类之外,我是否应该再创建20个类

OBJ

达尔

BBL

前安塔顿层

  protected void Add(object sender, DirectEventArgs e)
        {
            BOboj_BLL bll_= new BOboj_BLL ();

            BOboj  obj_ = new BOboj 
            {
                Name = Name.Text,
                ..............
                ...............

            };
            bll_.Add(obj_ );
}
谢谢。

来自文章-

N层/3层体系结构样式的主要优点是:

  • 可维护性。因为每一层都独立于其他层,所以可以在不影响系统的情况下执行更新或更改 应用程序作为一个整体
  • 可扩展性。因为层是基于层的部署的,所以扩展应用程序相当简单
  • 灵活性。因为每一层都可以独立管理或扩展,所以灵活性增加了
  • 可用性。应用程序可以利用模块化体系结构,使系统能够使用易于扩展的组件,从而提高 可用性
你有紧密耦合的层。试着让它们松耦合

首先,以下visual studio解决方案模板可能会对您有所帮助-

  • DA对象应该以某种方式表示数据库模式,并且应该严格绑定到数据库活动

  • 业务层这是您应该使用特定于项目逻辑的数据进行操作的地方。您的业务对象并不总是与DA对象相同(请想象DA对象有两个属性Forename和LastName,但由于某些原因,您的BO对象只有一个属性姓氏,因为在逻辑中从未使用Forename。当业务部门改变主意,他们也想使用Forename进行操作时,您只需将其添加到此层中)

  • 表示层对象应严格绑定到视图。不应有任何逻辑。这些对象应仅用于显示活动

  • 当你试图保留这些规则代码时,不仅对你,尤其是对你的队友来说,它更清晰、更容易维护。扩展分离良好的代码更容易


    还请记住,在某些情况下,例如在使用web服务的项目中,可以使用面向服务的对象在第四层实现。

    仔细阅读这个有用的问题-是的,这是正确的实现。这种方法的优点是,您可以在每一层捕获异常,优雅地使用u进行edditing。您的意思是什么“紧密耦合层”您不能在不修改BLL的情况下更改DAL。您的DAL也紧密耦合到底层数据库类型MS SQL。尝试使用接口(理论上称之为契约)与DAL互动。@sakirayanoglu-给我一点时间,我会在回答中更详细地发布它。你能给我一个如何实现的详细示例或一个链接吗?谢谢你谢谢你的回答。你对这个问题也有什么看法。@Sakir-我对你提供的链接中的第二个问题感到困惑。我不明白你到底需要做什么例如,通过view,我收集连接不同表的个人信息,但是我也有一个table person和一个person类,这与view收集的不同。我是否应该为此创建一个新类?我不理解,例如,您有数据库视图PersonalInformation,它为您返回来自例如table person的数据在这个例子中,有三个类Person,DetailedInformation和PersonInformation,它们都有Person和DetailedInformation类的实例,比如公共类PersonInformation{public-Person-Person{get;set;}public-DetailedInformation-DetailedInfo{get;set;}
    BOboj_DAL {
    
            public bool Add(BOboj obj)
            {
                using (SqlConnection con = Connect.connect)
                {
                    string sql = "insert into Persons (Id,Name,
                     .......
                     .......
    }
    
    BOboj_BLL {
    
            .......
            .......
            public bool Add(BOboj_DAL obj)
            {
                BOboj_DAL bb_dal = new BOboj_DAL();
                try
                {
                    return bb_dal.Ekle(obj);
    
                }
                catch (Exception)
                {
    
                    throw;
                }
                finally { bb_dal = null; }
    
            }
    
            .......
            .......
    }
    
      protected void Add(object sender, DirectEventArgs e)
            {
                BOboj_BLL bll_= new BOboj_BLL ();
    
                BOboj  obj_ = new BOboj 
                {
                    Name = Name.Text,
                    ..............
                    ...............
    
                };
                bll_.Add(obj_ );
    }