当组件无法从外部访问时如何处理类组合
本文关键字:处理 组合 何处理 组件 从外部 访问 | 更新日期: 2023-09-27 18:04:35
例如,如果我说我有三个类A
、B
和C
,其中B
和C
与A
有组合关系。这意味着B
和C
的生命由A
处理,而且B和C不能直接从外部进入。
出于某种原因,我的 DataService
类需要返回 B
和 C
的对象,因为它不能返回A
的对象作为B
并且C
不能同时初始化。(为了能够初始化C
您必须先初始化B
(。
因此,我从DataService
返回DataTables
,然后在类内部A
这些数据表转换为B
/C
对象。
-
如果
B
和C
对象不能同时初始化,是否可以说B
和C
与A
有组合关系? -
如果它的成分是必须产生
A
,里面有B
和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());
}
}
实际场景是我有一个名为 WageInfo
的类和类Earning
,Deduction
在设计中具有组合关系。但是要先生成Deductions
您应该生成earnings
并应保存在表中。然后,只有您可以为earnings
生成deductions
来计算余额工资。
另请注意,这些包含的类与包含的类 WageInformation 具有一对多关系。所以实际上WageInfo有一个List<Earnings>
和List<Deduction>
我最初的问题是,如果我的DataService
类返回Deductions
/Earnings
对象(实际上是列表(而不是WageInfo
还不清楚?
- 如果
A
有B
和C
,那么它就是一个组合,假设B
和C
都不能自己"生活"。创建B
和C
的时间不会在其中发挥作用。 -
A
不必为了使其成为一个组合而创建B
和C
。这些可以在构建A
时从外部提供给它,假设它们被赋予了适当的上下文。例如,如果B
和C
需要对A
的引用,那么创建它们的人需要提供A
,或者当B
和C
被添加到其中时,A
可以取得所有权。 - 为了更轻松地处理此类问题,请为您希望在外部使用的
B
和C
部分创建接口。与类B
和C
不同,接口必须能够独立存在,即在有或没有对象A
上下文的情况下是有意义的。
#3 中的接口很重要,因为您的数据服务想要返回 B
和 C
。在没有接口的情况下返回它们很有可能违反封装,因为大概B
和C
的某些功能仅在A
上下文中相关,而调用方缺少A
的上下文。