处理数据库数据的良好OOP设计原则

时间:2012-05-15 05:32:21

标签: c# vb.net oop database-design

我觉得我在问一个非常基本的问题,我想我应该能够在互联网上找到一个好的答案。但是我在搜索时筋疲力尽,只发现了几块干骨头。最重要的是,我现在害怕这个问题可能过于主观了:)

无论如何,这里提出了问题。在面向对象程序中从关系数据库访问,处理和操作数据被认为是什么好方法?到目前为止,在我的编程中,我一直在以程序的方式处理数据库数据。我目前正在积极尝试改善我的OOP习惯,我不知道如何处理这个问题。

以下是我正在使用的方案之一。我有一张桌子,里面有许多制造工作条目。我正在编写的应用程序(改进版)对每个作业执行大量处理。例如,我遍历表中的每一行并执行以下操作:

  • 将截止日期发布到Google日历
  • 创建给定目录中作业唯一的文件夹
  • 为作业创建工作单
  • 为工作创建合同简报
  • 管理旅行者文件
  • 向几个人发送电子邮件信息
  • 等,列表继续

你明白了。每项工作都会进行大量处理。目前我拥有大多数优秀的程序员所称的意大利面条代码。也许它不是那么糟糕,但差不多。我使用for循环遍历表中的每一行,并在每一行上依次执行每个操作。我不喜欢目前设计的方式,但我不知道该做些什么更好。

我想如果我有一个称为“作业”的整洁对象,它可以实现作业的所有属性并提供执行每个动作的方法。然后我甚至可以制作一个自定义的集合来处理我的工作,所有的世界都会变得更加明亮。整个解决方案更易读,更易于维护,更容易添加操作以执行每项工作(经常发生)等。

但我的问题是我无法弄清楚如何在花哨的对象和数据库之间建立连接。我应该使用某种对象关系映射(我阅读了各种各样的混合意见)?我只是遍历所有行并将它们转换为在集合中累积的对象吗?或者是以程序化的方式继续进行此类项目的最佳选择?我很乐意为您提供答案和意见。

我以抽象的方式对这个主题的信息感兴趣。换句话说,我想知道如何处理这样的情况。不仅仅是我给出的例子的具体内容。但当然具体情况也很好。我使用VS 2010在Visual Basic和C#中完成大部分编程。

2 个答案:

答案 0 :(得分:4)

查看Repository模式。这是以有意义的方式将数据访问与业务处理分开的好方法。应用这种模式我有几个项目:

  • 实体 - 存储内容的对象
  • DataAccess - ORM DbContext和ADO.NET包装器
  • 存储库 - 包装查询以将强类型函数呈现给应用程序的其余部分
  • TheRest - 其他项目/层:业务,GUI等

有关每种项目类型的详细说明,请参阅How to use Entity Framework context with dependency injection?

答案 1 :(得分:1)

  

但我的问题是我无法弄清楚如何在奇特的对象和数据库之间建立联系。我应该使用某种对象关系映射(我阅读了各种各样的混合意见)?

至于处理。使用访问者模式,让想要处理数据的所有不同代码自己注册为访问者。您还可以使用控件容器的反转来管理它(IHandlerOf<Job>IHandlerOf<TravelerDocument>)。

它为您提供了更松散耦合的数据处理方式。