【发布时间】:2013-07-04 06:49:28
【问题描述】:
我正在考虑为更大的应用程序设计实体基类,并希望得到一些意见。主要是如果指定的是必须完成的方式,或者是否有更清洁的方式。
在解决方案中,我有一些所有实体都将继承的baseclass 变体。关系可以指定如下:
EntityBase//the primary baseclass containing name and id + other stuff
NestedEntityBase:EntityBase //(if class will be able to contain lists of itself)
VersionedEntityBase:EntityBase //(Some parameters specific for versioned entities)
VersionNestedEntityBase:NestedEntityBase// (versioned AND nested)
CurrentStateEntityBase:VersionedEntityBase// (the currentstate objects)
VersionStateEntityBase:VersionedEntityBase// (old objects, saved when surrentstate objects change)
CurrentStateNestedEntityBase:VersionNestedEntityBase// (the currentstate objects)
VersionStateNestedEntityBase:VersionNestedEntityBase //(old objects, saved when surrentstate objects change)
不幸的是,这会造成一些代码重复,因为不可能进行多重继承。
它还将设置通用服务和通用控制器基类的划分。
这是必须的处理方式还是我错过了一些更有效的巧妙方法?
【问题讨论】:
-
为什么不将
Nested命名为List,如果它包含自己的列表!你也可以使用界面 -
嵌套类包含的两个部分是它自己类型的集合(命名版本)和它自己类型的当前属性(实体代码优先)。 CurrentState 和 VersionSTate 类似,但 version 包含自己类型的 Parent 和自己类型的 collection 'Children'。我同意接口(我使用的),它们给了我更多选择。但我的主要问题是如何用尽可能少的代码重复来填充接口实例。但是我找不到避免重复的方法,必须复制上层实体库属性。
-
但在这种情况下也许是不可避免的?
-
是的,我想补充一下您对接口的评论。我想到了 Rayende (ayende.com/blog/4769/…) 的帖子并且可以解释它(我看到其他一些人提出类似的建议,也许你?)是拥有一个大型基类并使用接口控制它。在某些层面上这似乎是个好主意,但据我所知,我必须先废弃实体代码并且不确定自动映射支持。
-
我对你的答案投了赞成票,因为通过接口减轻一些继承(因此存在一些属性重复)似乎是我能找到的降低复杂性的最佳方法。
标签: c# inheritance entity base-class