【发布时间】:2018-05-10 11:38:51
【问题描述】:
您如何公开聚合成员以进行演示,同时防止该成员被直接修改?因此,我需要对该成员的只读访问权限,以便在 UI 上显示它,例如:
class A {
B b;
void doSomething() {
b.update();
}
}
class B {
String getTitle() {
return title;
}
Items getItems() {
return items;
}
void update() {
...
}
}
interface SomeView {
void show(Items items);
}
快速而简单的解决方案是添加一个方法A::getB() 并调用someView.show(b.getItems()),但是返回的B 实例可以在A 之外进行修改(B::update() 可以在@ 之外调用987654327@).
我正在考虑几种解决方案,但不太确定哪些是最好的,或者是否已经有这样做的常见做法。
我想到的一个解决方案是使用A 返回的只读版本的B。
class A {
ReadOnlyB getReadOnlyB() {
return new ReadOnlyB(b);
}
}
class ReadOnlyB {
B b;
ReadOnlyB(B b) {
this.b = b;
}
String getTitle() {
return b.getTitle();
}
Items getItems() {
return b.getItems();
}
}
【问题讨论】:
-
您的应用程序中有层吗?如果是这样,它们的依赖模式是什么?您如何将它们彼此隔离?
-
我有领域层、API 层和表示层。实际上对于视图,我会使用
ItemPresentation而不仅仅是Item并让ItemMapper将Item映射到ItemPresentation。 -
不管怎样,即使是同层的实体,
A::getB()也不是什么好东西。就像如果有一个单独的类C也属于域层,那么C能够直接访问B仍然不好。
标签: oop architecture domain-driven-design