Design patterns 域对象仅表示一种类型的元素比能够表示几种不同类型的元素的优势

Design patterns 域对象仅表示一种类型的元素比能够表示几种不同类型的元素的优势,design-patterns,oop,class,object,Design Patterns,Oop,Class,Object,1) 据我所知,每个域对象实例(在BLL层)应该完全代表域的一个元素(员工、书籍、汽车等) 那么,拥有两种类型的域对象(比如一种类型代表特定论坛,另一种类型代表该论坛中的线程)比拥有一种类型的域对象同时代表论坛和该论坛中的线程有什么优势呢 另一个例子:有两种类型的域对象(一种表示汽车实例,另一种表示总线实例)的优点是什么,而不是有一种类型的域对象同时表示汽车和总线 2) 域对象实例应该始终表示特定类型的单个项,还是可以表示相同类型的一组项?例如,是否存在这样一种情况:单个对象实例应该表示一组


1) 据我所知,每个域对象实例(在BLL层)应该完全代表域的一个元素(员工、书籍、汽车等)


那么,拥有两种类型的域对象(比如一种类型代表特定论坛,另一种类型代表该论坛中的线程)比拥有一种类型的域对象同时代表论坛和该论坛中的线程有什么优势呢

另一个例子:有两种类型的域对象(一种表示汽车实例,另一种表示总线实例)的优点是什么,而不是有一种类型的域对象同时表示汽车和总线


2) 域对象实例应该始终表示特定类型的单个项,还是可以表示相同类型的一组项?例如,是否存在这样一种情况:单个对象实例应该表示一组员工,而不仅仅是一个员工


thanx回答(1): 这是你必须不断做出的判断。问一下,这两种类型的事物是相似的还是不同的?有时它可能会走任何一条路,两个优秀的程序员可能会做出不同的决定。记住,这就是你如何做到两全其美的方法:将所有需要的个人主义集中组织起来的共同功能。这是oop/d的核心

(您甚至可能最终会在多个对象之间分割域项表示,这是由驱动的,但一开始我并不担心这一点。一个域项的一个类是一个很好的起点,而且非常简单。)

回答2:
是的,域对象通常表示项目组和单个项目。通常,您会同时拥有一个car对象和一个cars对象,称为对象。

使用多个域对象的一个很好的理由是更好地处理如下代码:

if (o.VehicleType == VechileType.Car)
    DoSomthing();
else if (o.VehicleType == VechileType.Bus)
    DoSomethingElse();
这些条件语句有一种在系统中复制自身的方式,每次它们都可能有细微的不同。使用不同的类型来表示汽车/公共汽车,这为所有这些逻辑提供了一个更好的去处。如果你看不到这样的逻辑,那么很可能你不需要为多种类型的复杂性而烦恼


本文有一些重构的好例子。

A)这是使用多个域对象的主要原因之一吗?B) “使用不同的类型来表示汽车/公共汽车会给所有的逻辑提供一个更好的去处”-我不确定你所说的“逻辑有一个更好的去处”到底是什么意思?我在一篇文章中添加了一个参考,其中对此进行了很好的讨论。