当组件无法从外部访问时如何处理类组合?

时间:2014-05-22 19:00:22

标签: c# class oop uml composition

例如,如果我说我有三个课程ABC,其中BC的成分关系附带{A 1}}。这意味着BC的生命由A处理,B和C也无法直接从外部访问。

由于某些原因,我的DataService类需要返回BC的对象,因为它无法将A的对象作为B和{{ 1}}无法同时初始化。 (为了能够初始化C,您必须首先初始化C

因此,我从B返回DataTables,然后在类DataService内,这些数据表将转换为A / B个对象。

  1. 如果无法同时初始化CB个对象,则说明CB与{{C具有组合关系是有效的1}}

  2. 如果它的成分必须在AA内生成B吗?

  3. 处理此类问题的正确方法是什么?

  4. 修改

    以下代码解释了我现在使用DataTables的方式。

    示例:

    C

    实际情况是我有一个名为class A { private List<B> B; private List <C> C; public A() { B= new List<B>(); C= new List<C>(); } public List<B> GetB( DataTable dt) { // Create a B list from dt return B; } } class Presenter { private void Show B() { _View.DataGrid = A.GetB(DataService.GetAListOfB()); } } 的类,以及在设计中具有组合关系的类WageInfoEarning。但是,为了首先生成Deduction,您应该生成Deductions并将其保存在表格中。然后,只有您可以为earnings生成deductions来计算余额工资。

    另请注意,这些包含的类与包含类WageInfo具有一对多的关系。实际上,WageInfo有一个earningsList<Earnings>

    我的初步问题是,如果我的List<Deduction>类返回DataService / Deductions个对象(实际列表)而不是Earnings,是否可以?

    还不清楚?

1 个答案:

答案 0 :(得分:1)

  1. 如果ABC,那么它就是一个组合,假设BC都不能自己“生活”。创建BC的时间不会发挥作用。
  2. A无需创建BC即可成为合成。这些可以在构造A时从外部给予它,假设它们被给予适当的上下文。例如,如果BC需要引用回A,那么创建它们的人需要提供A,或A可以在B获得所有权{1}}和C已添加到其中。
  3. 为了更轻松地处理此类问题,请为您希望在外部使用的BC部分创建界面。与类BC不同,接口必须能够独立存在,即在有或没有对象A的上下文时有意义。
  4. #3中的接口很重要,因为您的数据服务想要返回BC。在没有接口的情况下返回它们很可能违反封装,因为大概BC的某些功能只与A的上下文和{A的上下文相关。呼叫方缺少1}}。