我想就如何改进整体计划设计提出一些建议。
我有一个主要类,它有两个经常需要相互交互的成员。这个类容器类有一个Initialize()
函数,用于初始化两个成员,以及其他提供对外界访问的函数:
class Foo {
public:
bool InitializeAandB();
void UseFoo();
private:
TypeA a;
TypeB b;
};
在调用UseFoo()
后的某个时刻,a
需要调用b
个公共函数之一。所以,让我们说TypeA有一个像这样的成员函数:
void TypeA::Function() {
if (true) {
TypeB *bpointer;
bpointer->Interact(); // Need pointer to b here.
}
}
TypeA
和TypeB
是单独的实体,不能合并为一个类。碰巧这些独立的实体需要在不同的时间彼此交互。
我不想让a
和b
公开,因为它们不应该从外部世界中看到。在TypeA
中添加TypeB
和Foo
作为朋友似乎是一个hacky修复。同样不理想,因为当TypeA
和TypeB
只需要了解彼此时,Foo
和GetA()
需要了解GetB()
。公共TypeB*
和TypeA
访问者函数也是如此。
第三个选项是将TypeA*
成员添加到TypeB
,将InitializeAandB()
成员添加到 <div>
<telerik:RadToolBar ID="rtlbCustomers" runat="server"
Width="100%" Height="18px">
<Items>
<telerik:RadToolBarButton runat="server" ImageUrl="~/Images/AddIco.png" Text="Add" Value="btnAdd" />
<telerik:RadToolBarButton runat="server" ImageUrl="~/Images/EditIco.png" Text="Change" Value="btnUpdate" />
<telerik:RadToolBarButton runat="server" ImageUrl="~/Images/DeleteIco.png" Text="Delete" Value="btnDelete" />
</Items>
</telerik:RadToolBar>
</div>
.RadToolBar .rtbItem {
height:16px !important;
}
期间设置。但这在某种程度上似乎是多余的,比如我错过了更好的整体设计。
有没有更好的方法来设计它?
答案 0 :(得分:1)
如何将TypeA::Function()
作为参数传递给line
(反之亦然)?
答案 1 :(得分:1)
依赖注入是我能想到的唯一选择。
答案 2 :(得分:0)
我同意@CreativeMind。你应该在这里使用DI容器。
将初始化阶段重构为单独的类,使用A
和B
的实例填充DI容器。从其实现中提取接口并将其作为契约放在某处。现在他们是服务,可以互相询问容器。
Foo
现在可以同样方式使用A
和B
- 通过容器。