【问题标题】:Object oriented layers [closed]面向对象的层[关闭]
【发布时间】:2012-09-20 03:28:36
【问题描述】:

大家好,我已经用 C++ 编写了一个学期的 OOP,而我刚刚开始使用 C#。我仍然不完全了解如何将图层彼此分开以及在哪里做什么。据我了解,有以下几层:

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

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

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

还有我将如何发送和接收不同的命令,例如查询命令与插入命令有何不同,因为它需要发回数据..

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

谢谢!

编辑。

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

我有不同的查询选项,其中之一是类型。所以我需要搜索父列表并返回每个对象的数据,如果它是指定的类型。 我的父对象有一个被覆盖的 ToString() 以及我的子对象,它们调用父对象 ToString() 以将对象的所有数据放入一个字符串中。我在这里做业务逻辑职责吗?此外,当我获得与我的类型匹配的对象列表并尝试使用 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;
}

【问题讨论】:

  • 从mvc开始?然后根据您的项目,无论什么有意义,您都可以制作图层。避免额外的层。运用你的直觉。
  • 写一些废话,请有经验的人改变需求,看看你需要从哪里提取东西。这更像是一个学习过程,而不是第一次就成功。

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


【解决方案1】:

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

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

让我们一步一步来:

存储 -> 数据访问

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

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

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

业务逻辑

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

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

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

业务逻辑可以是小型、大型或其他业务运行器的组合。

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

数据库 模型

命令处理器

命令处理器运行业务逻辑片段并将整个系统的片段修补在一起,有时在 MVC

中称为控制器

数据库 模型

用户界面

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

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

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

总体:

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

【讨论】:

  • 你可能想加入视图模型,它只包含视图所需的数据,可能还有一些格式化、展平、数据验证...
  • 绝对是@billy,但我们现在应该尽量保持简单;)
  • 感谢您的帮助。我试图从数据访问层查询方法开始。我将三个子对象存储在父类型的通用列表中。我有不同的查询选项,其中之一是类型。所以我需要搜索抛出的父列表并返回每个对象的数据,如果它是指定的类型。我的父母对象有一个被覆盖的 ToString() 以及我的孩子调用父母 ToString() 以将对象的所有数据放入一个字符串中。
  • 嗯,cmets 只能编辑 5 分钟,我有一个字符帽,哈哈,所以忽略它,我用我的回复编辑了我的原始帖子。
猜你喜欢
  • 2015-04-28
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
  • 2014-06-19
  • 2010-10-12
相关资源
最近更新 更多