在类之间交换数据 - DI、IoC
我的设置是:
class ModelA { ... }
interface IModelARetriever { IEnumerable<ModelA> GetObjects(); }
class ModelB { ... }
class DomainObject { List<ModelB> ModelBList; }
可以使用 ModelA
对象列表中的操作数据来附加 DomainObject.ModelBList
,但不是必需的。我应该把这个逻辑放在哪里?
我应该在 DomainObject
中创建一个采用 IEnumerable
的方法吗?这意味着更改可以创建 ModelB 对象的每个可能的数据源的 DomainObject
。
我应该创建一个单独的接口 ModelBFactory
并扩展它吗?这听起来最好,但只是想听听专家的意见。
My setup is:
class ModelA { ... }
interface IModelARetriever { IEnumerable<ModelA> GetObjects(); }
class ModelB { ... }
class DomainObject { List<ModelB> ModelBList; }
DomainObject.ModelBList
could be appended using manipulated data from lists of ModelA
objects, but not neccessarily. Where should I put the logic for this?
Should I create a method in DomainObject
that takes a IEnumerable<ModelA>
? That would mean changing the DomainObject
for every possible source of data that can create objects of ModelB.
Should I create a separate interface ModelBFactory
and extend that? This sounds best, but just want an expert opinion.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果我正确地阅读了问题,
ModelA
对象可以转换为ModelB
对象。我想说这需要ModelA
上的ToModelB()
方法。如果转换很简单(例如,只需复制 ModelA 的属性值的子集),我会直接在 ToModelB() 中实现它;如果它更复杂(例如,一些属性值的条件复制、值的组合、算术等),我会有一个 ModelAConverter 类来完成这项工作。然后,我将您提到的
AddModelAObjects()
方法添加到DomainObject
。然后,您可以选择如何将ModelA
转换为ModelB
- 您可以将ModelAConverter
注入到DomainObject 的构造函数并在
AddModelAObjects()
中进行转换,或者进入ModelA
的构造函数并在ToModelB()
中进行转换。我可能会选择后者,但这取决于对象还必须做什么。If I've read the question correctly,
ModelA
objects can be converted intoModelB
objects. I'd say that calls for aToModelB()
method onModelA
. If the conversion is straightforward (say, just copying a subset ofModelA
's property values), I'd implement it inToModelB()
directly; if it's more complex (say, conditional copying of some property values, combination of values, arithmetic, etc) I'd have aModelAConverter
class which did the job.I'd then add the
AddModelAObjects()
method you mentioned toDomainObject
. You then have two choices of how you convert theModelA
s intoModelB
s - you either have theModelAConverter
injected intoDomainObject
's constructor and do the conversion inAddModelAObjects()
, or intoModelA
's constructor and do the conversion inToModelB()
. I'd probably go with the latter, but it depends on what else the objects have to do.