BLL, DAL, OBJ and 3 layer architecture

6

我的问题是关于3层架构。

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

如果我按照“正常”的方式做,将所有这些放在表示层中并在一个地方更新所有内容。

我是否正确应用了这种3层架构,使用分层架构有哪些优势?

我的第二个问题是:

在DAL中,我通过_view收集数据。我想知道,对于每个视图,我应该编写另一个BOboj吗?我已经有了一个BOboj类,但它并不包含所有字段。

插入数据时,我必须使用我的BOboj,但在列出数据时,我正在使用视图,在这种情况下,我应该为每个视图创建另一个BOboj_view类还是其他什么?最容易的方法是什么?

例如; 我有20个视图和40个类,每个类都映射到sql server上的每个表,我的视图收集来自不同表(也就是不同对象)的数据。我应该创建20个除了40个代表视图的类以外的类吗?

OBJ

class BOboj {
        private int _PId;
        private string _Name;
        .......
        .......


}

DAL

BOboj_DAL {

        public bool Add(BOboj obj)
        {
            using (SqlConnection con = Connect.connect)
            {
                string sql = "insert into Persons (Id,Name,
                 .......
                 .......
}

BBL

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_ );
}

谢谢。


请查看这个有用的问题 - https://dev59.com/41DTa4cB1Zd3GeqPKIwP - Parag Meshram
是的,这是正确的实现。这种方法的优点是您可以在每个级别上优雅地捕获异常。 - Taj
2个回答

7
  1. DA对象应以某种方式表示您的数据库架构,并且应与数据库活动严格绑定。

  2. 业务层是您应使用特定于项目逻辑操纵数据的地方。您的业务对象并不总是与DA对象相同(请想象一个具有名称和姓氏两个属性的DA对象,但由于某些原因,您的BO对象仅具有一个姓氏属性,因为名字在逻辑上从未被使用。当业务变化他们的想法,并且他们也想操纵名字时,您只需在此层中添加它即可)。

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

当您尝试遵循这些规则时,代码更加清晰易懂,并且不仅对您而且对您的团队成员来说都更易于维护。分离良好的代码更容易扩展。

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


谢谢您的回答。您对这个问题有什么看法呢?https://dev59.com/4nLYa4cB1Zd3GeqPdfOB - user1865552
@Sakir - 我对你提供的链接中的第二个问题感到困惑。不明白你需要做什么。 - Piotr Czarnecki
通过视图,我从不同的表中收集人员信息,但是我还有一个名为person的表和person类,与视图收集的内容不同。我应该为此创建一个新类吗? - user1865552
我理解,例如您有一个数据库视图 PersonalInformation,该视图会返回来自表 Person 和 DetailedInformation 的数据。那么在这种情况下,对于我来说,拥有三个类 Person、DetailedInformation 和 PersonInformation 就很有用了,它们都包含一个 Person 类和 DetailedInformation 类的实例,就像这样 public class PersonInformation {public Person Person {get;set;} public DetailedInformation DetailedInfo {get;set;}}。 - Piotr Czarnecki

2

来自MSDN文章 -

N层/3层架构风格的主要优点是:

  • 可维护性。由于每个层都独立于其他层,因此可以进行更新或更改而不影响整个应用程序。
  • 可扩展性。由于层是基于层次结构部署的,因此扩展应用程序相对容易。
  • 灵活性。由于每个层可以独立管理或扩展,因此灵活性得到增强。
  • 可用性。应用程序可以利用启用系统的模块化体系结构,使用易于扩展的组件,从而提高可用性。

您的层之间耦合度过高,请尝试使它们之间松散耦合。

首先,以下Visual Studio解决方案模板可能会帮助您 -

分层架构解决方案指南2010


你说的“紧耦合层”是什么意思? - user1865552
@sakirayanoglu - 给我一点时间,我会在回答中以更详细的方式发布它。 - Parag Meshram
能否给我一个详细的实现示例或链接。谢谢。 - user1865552
你对这个问题有什么看法??https://dev59.com/4nLYa4cB1Zd3GeqPdfOB#16937854?noredirect=1#16937854 - user1865552
嗨,Parag Meshram,您能给出一个基于这个问题的示例,说明我们如何在项目中实现接口或提供链接吗?非常感谢。 - sakir
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接