我从事数据库设计已经有很长一段时间了,这些天我也在使用C#。OO对我来说是有意义的,但我觉得我在OO设计的深层理论方面没有很好的基础。
在数据库领域,有很多关于如何设计数据库结构的理论,主要的概念是规范化。规范化直接控制数据库的结构,并在某种程度上指示如何在数据库中安排实体。
在如何设计面向对象程序的结构背后有类似的概念吗?
我所追求的是一个或多个潜在的理论原则,这些原则自然地指导开发人员为给定问题的解决方案进行“正确”的设计。
我可以在哪里找到更多信息?
有没有我应该读一读的工作指南?
更新:
感谢每个人的回答。我读到的内容似乎是说,没有“面向对象设计的伟大理论”,但有一堆重要的原则--设计模式在很大程度上体现了这些原则。
再次感谢您的回答:)
发布于 2008-10-29 13:12:01
注意一些设计模式的文献。
有几种广泛的类定义。持久对象(类似于关系表中的行)和集合(类似于表本身)的类是一回事。
一些"Gang of Four“设计模式更适用于活动的应用程序对象,而不太适用于持久对象。当你在研究像抽象工厂这样的东西时,你会遗漏OO设计的一些关键点,因为它适用于持久化对象。
Object Mentor What is Object-Oriented Design?页面让许多人真正需要知道如何从关系设计过渡到面向对象设计。
规范化,BTW,并不是一个总是适用于关系数据库的通用设计原则。当您有更新事务时,将应用规范化,以防止更新异常。这是一种技巧,因为关系数据库是被动的;您要么必须添加处理(如类中的方法),要么必须传递一堆规则(规范化)。在数据仓库世界中,更新很少(或根本不存在),因此标准规范化规则并不重要。
因此,对于对象数据模型不存在“这样的规范化”。
在OO设计中,设计持久化对象最重要的规则可能是Single Responsibility Principle。
如果您设计的类对真实世界的对象、和具有良好的保真度,那么您将以一种非常专注的方式将责任分配给这些类,您会对您的对象模型感到满意。您将能够以相对较少的复杂性将其映射到关系数据库。
事实证明,当你从责任的角度来看事情时,你会发现2NF和3NF规则适合合理的责任分配。唯一键仍然很重要。派生数据成为方法函数的职责,而不是持久属性。
发布于 2008-10-29 11:51:03
“设计模式”这本书是你的下一步。
http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612
但是,您不必对所有事情都使用面向对象的方法。不要对它信教。如果一种更程序化的方法感觉更直接,那么就去做吧。刚接触OO的人往往会逾期一段时间。
发布于 2008-10-29 12:04:01
我认为Agile Software Development, Principles, Patterns, and Practices相当不错。
它对列出的here的面向对象原则进行了深入的讨论
面向对象的设计和依赖管理原理-面向对象的设计和依赖管理原理-面向对象的设计和依赖管理原理-面向对象的设计和依赖管理原理-面向对象的设计和依赖管理的原则-开放封闭的原则-开放封闭的原则-利斯科夫替换Principle
<
https://stackoverflow.com/questions/246499
复制相似问题