面向对象的层

时间:2012-09-20 03:28:36

标签: c# c++ oop object-oriented-database c++-concepts

嘿伙计们我现在用C ++编写了一个学期的OOP,我刚刚开始使用C#。我仍然不完全了解如何将图层彼此分开,以及在哪里做什么。根据我的理解,有这些层:

存储 - >数据访问 - >业务逻辑 - >命令处理器 - >用户界面

现在我似乎无法完全理解每个层的责任是什么......

我理解数据访问只包含添加,更新,删除,查询等方法,并且数据访问不关心它是什么插入它只是接收对象作为参数并对其做任何事情。业务逻辑是否从命令处理器从用户界面获取数据并从命令处理器发送的数据创建对象并对其进行输入验证?

此外,我将如何发送和接收不同的命令,例如Query命令与insert命令的区别,因为它需要将数据发回...

你可能会说我很丢失,而且我很难找到关于这个主题的好教程。

谢谢!

编辑。

我试图从数据访问层查询方法开始。我有三个子对象,我存储在父类型的通用列表中。

我有不同的查询选项,其中一个是类型。所以我需要搜索父列表并返回每个对象的数据(如果指定的类型)。 我的父对象有一个覆盖的ToString()以及我的孩子,它们调用父对象ToString()以将对象的所有数据转换为一个字符串。我在这里做Business Logic的职责吗?此外,当我得到匹配我的类型的对象列表并尝试迭代抛出与foreach调用ToString()它只会调用父ToString()我猜?

public string Lookup(Types type)
{
List<Parents> search = new List<Parent>();


switch (type)
{
case Types.TypeOne:
{
search = ParentDataBase.FindAll( delegate(Child1 findChild) { 
return findChild is ChildOne; } );

}
break;
case Types.TypeTwo:
{
search = ParentDataBase.FindAll( delegate(Parents findChild) { 
return findChild is ChildTwo; } );
}
break;
case Types.TypeThree:
{
search = ParentDataBase.FindAll( delegate(Parent findChild) { 
return findChild is ChildThree; } );
}
break;
}
string results = "";

foreach (Parent x in search)
{
results += t.ToString();
}
return results;
}

1 个答案:

答案 0 :(得分:3)

问题中出现的箭头令人困惑,所以在讨论中我会改变它们。

所以只允许我放两个链接,所以当提到它们时,请尝试搜索 CRUD MVC 架构。

让我们一步一步:

存储 - &gt;数据访问

这通常由ORM处理。 ORM将处理数据库访问。

您创建的ORM加自定义(模型)对象允许abstracted数据访问。这看起来像是:

ORM将数据转换为数据库或从数据库转换数据以使其可用。 ORM可以为您处理 CRUD 操作,以便查询,更新和插入不会出现在代码的其他部分。

业务逻辑

业务逻辑通过访问,修改和保存数据来处理数据。

业务逻辑可以访问您的模型,以实现数据的访问和保存。

修改部分在业务逻辑中实现。

业务逻辑可以是小型,大型或其他业务运营商的组合。

我们的图表现在看起来像:

  

数据库&lt; - ORM - &gt;模型&lt; - 业务逻辑

命令处理器

命令处理器运行多个业务逻辑并将整个系统的各个部分组合在一起,有时在 MVC中称为控制器

  

数据库&lt; - ORM - &gt;模型&lt; - 业务逻辑&lt; - 命令处理器

用户界面

用户界面(UI)可以分为两部分,数据表示和用户输入。

数据表示在MCV中称为视图,负责获取数据并使其可供用户阅读。

用户输入触发命令处理器的各个部分。

总体:

                                                                ,-> View
Database <- ORM -> Models <- Business Logic <- Command Processor
                                                                `<- User Input