2012-09-20 40 views
1

嘿,我一直在用C++编程一个学期的OOP,我刚刚启动C#。我仍然不完全明白如何将图层彼此分开以及什么在哪里。从我的理解有这层:面向对象层

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

现在我似乎无法了解每个层的责任到底是什么..

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

而且怎么会有我发送和收到不同的命令,如查询命令怎么会不是一个插入命令太大的不同,因为它需要将数据发送回..

正如你可能会告诉我相当迷茫,我一直很难找到关于这个主题的好教程。

谢谢!

编辑。

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

我有不同的查询选项,其中之一是类型。所以我需要搜索父列表并返回每个对象的数据,如果它的类型指定的话。 我的父对象有一个覆盖的ToString()以及我的孩子,它们调用父母的ToString()将对象的所有数据都转换为一个字符串。我在这里做商业逻辑职责?另外当我得到匹配我的类型的对象的列表,并尝试迭代抛出一个调用ToString()的foreach它只会调用父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; 
} 
+0

开始用MVC?那么无论什么是有意义的,取决于你的项目你可以创建图层避免多余的图层。用你的直觉。 – DarthVader

+0

编写一些垃圾代码,请求某人有经验来改变需求并查看需要将问题抽出的地方。这更多的是一个学习过程,而不是让它第一次工作。 – nhahtdh

回答

3

问题中提出的箭头很混乱,所以在讨论期间我会改变它们。

所以只让我把两个链接都提到,当他们这样尝试搜索CRUDMVC架构

让我们借此一步步时间:

存储 - >数据访问

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

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

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

业务逻辑

业务逻辑通过访问,修改和保存它与数据打交道。

业务逻辑可以访问您的模型以完成数据的访问和保存。

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

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

我们的图形现在的样子:

数据库< - ORM - >模型< - 业务逻辑

命令处理器

命令处理器上运行的业务逻辑块,将整个系统的各个部分连接在一起,有时称为控制器MVC

数据库< - ORM - >模型< - 业务逻辑< - 命令处理器

用户界面

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

数据表示形式在MCV中称为视图,负责获取数据并使其可读。

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

总评:

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

您可能想要查看模型,其中只包含视图所需的数据,可能还有一些格式化,展平,数据验证...... – billy

+0

绝对@billy,但我们现在应该可能保持简单;) – squirly

+0

谢谢这有助于。我试图从数据访问层查询方法开始。我有三个子对象存储在父类型的通用列表中。我有不同的查询选项,其中之一是类型。所以我需要搜索抛出父列表并返回每个对象的数据,如果它的类型指定的话。我的父母对象有一个overwridden ToString()以及做我的孩子,它调用父母的ToString()来获取对象的所有数据到一个字符串中。 – ThingWings