![]() |
1
26
第三个选项如何,与第一个选项密切相关,但使用接口:
这样,实现就可以(或可以)在一个地方进行,并且只有通过您所查看的接口才能进行区分。 |
![]() |
2
5
( 编辑: 我认为EricPetrolje在他的答案中提供了一个非常好的基于接口的解决方案。首先,我可能会投票赞成他的建议。) 从你的两个选择中,我肯定会投赞成票 设计方案2。 设计1 我认为拥有一个内部完全不是只读的“只读”类是没有意义的:
设计2 它比只读类更清楚,它是全功能类的简化版(基类),或者用不同的措辞。 |
![]() |
3
1
我会说设计2,但然后您应该将readOnlyrepository的名称更改为类似readRepository的名称。 继承定义了类之间的is-a关系,说“读写存储库是一个readonlyrepository”听起来不合乎逻辑。但“readwriterepository是一个readingrepository”确实如此。 |
![]() |
4
1
首先,让我承认,我正在对你可能会做什么做一些假设。如果这没有抓住要点,请告诉我。 我不确定这些类在您的两个选项中有多有用。我假设您有一个调用代码,它将使用只读存储库的实例,而在其他时候使用读/写存储库的实例,但是接口不匹配,所以无论如何您必须在代码中进行不同的关联? 如果您试图在存储库是只读的时写入它,并让您的代码处理这些异常,那么最好提供一个公共接口,然后抛出异常。 |
![]() |
5
0
我肯定会说设计2是最强的。如果您想要一个只读实现,它不需要知道任何关于编写的内容。使用插入、更新和删除方法扩展只读实现是非常有意义的。我也认为这个设计最符合 Open-Closed principle . |
![]() |
6
0
我建议使用一个基类readablefoo,其中包含一个密封的派生类immutablefoo(其构造函数采用readablefoo),一个可能继承的派生类mutablefoo,以及一个类readableshadowfoo(其构造函数采用readablefoo(可能是也可能不是mutable),但它将作为只读包装器。 |
![]() |
7
0
Eric给出的答案是固体原理ISP。它使用起来非常简单和基本。 |