例如,如果我说我有三个课程A
,B
和C
,其中B
和C
的成分关系附带{A
1}}。这意味着B
和C
的生命由A
处理,B和C也无法直接从外部访问。
由于某些原因,我的DataService
类需要返回B
和C
的对象,因为它无法将A
的对象作为B
和{{ 1}}无法同时初始化。 (为了能够初始化C
,您必须首先初始化C
。
因此,我从B
返回DataTables
,然后在类DataService
内,这些数据表将转换为A
/ B
个对象。
如果无法同时初始化C
和B
个对象,则说明C
和B
与{{C
具有组合关系是有效的1}}
如果它的成分必须在A
和A
内生成B
吗?
处理此类问题的正确方法是什么?
修改
以下代码解释了我现在使用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());
}
}
的类,以及在设计中具有组合关系的类WageInfo
和Earning
。但是,为了首先生成Deduction
,您应该生成Deductions
并将其保存在表格中。然后,只有您可以为earnings
生成deductions
来计算余额工资。
另请注意,这些包含的类与包含类WageInfo具有一对多的关系。实际上,WageInfo有一个earnings
和List<Earnings>
我的初步问题是,如果我的List<Deduction>
类返回DataService
/ Deductions
个对象(实际列表)而不是Earnings
,是否可以?
还不清楚?
答案 0 :(得分:1)
A
有B
和C
,那么它就是一个组合,假设B
和C
都不能自己“生活”。创建B
和C
的时间不会发挥作用。A
无需创建B
和C
即可成为合成。这些可以在构造A
时从外部给予它,假设它们被给予适当的上下文。例如,如果B
和C
需要引用回A
,那么创建它们的人需要提供A
,或A
可以在B
获得所有权{1}}和C
已添加到其中。B
和C
部分创建界面。与类B
和C
不同,接口必须能够独立存在,即在有或没有对象A
的上下文时有意义。#3中的接口很重要,因为您的数据服务想要返回B
和C
。在没有接口的情况下返回它们很可能违反封装,因为大概B
和C
的某些功能只与A
的上下文和{A
的上下文相关。呼叫方缺少1}}。