我一直在考虑的一般架构问题
如果我有一个接口,并且有5个实现该接口的类,但是一个类不需要实现其中一个接口成员,那么我应该:
一个例子是,如果我有5个实体的接口IRepository和5个单独的存储库,但对于一个实体,我不希望能够更新记录。
我目前支持选项3,但过时似乎不是正确的描述。
任何想法?
顺便说一下,我知道这是相当广泛和客观的,但我想听听一些关于最佳方式的意见。
答案 0 :(得分:4)
您可以创建另一个界面并继承您实际使用的界面
public interface IReadOnlyRepository
{
void Read();
}
public interface IRepository : IReadOnlyRepository
{
void Write();
}
然后你可以使用'base'接口IReadOnlyRepository
作为你不想完全实现的类。
或者,当用户尝试从未实现C的类调用C时,使用数字3。抛出NotImplementedException
/ InvalidOperationException
或其他相关例外。
我希望这会有所帮助。
答案 1 :(得分:3)
为什么没有2个接口?
IReadableRepo
{
Data Read();
}
IUpdatableRepo : IReadableRepo
{
void Update();
}
然后在你的课程中实现最相关的一个。
答案 2 :(得分:3)
正式答案是将其拆分为IRepository: IReadonlyRepository
并仅实现适用的接口。
但作为一种实用的方法,只有一种情况,您可以从Update()方法中抛出一个NotSupported异常。这是你的选择3,但你无法真正有效地标记它以进行编译时反馈。
答案 3 :(得分:1)
我不是这些问题的专家,但从我的观点来看,如果您决定只使用一个界面,我会看到一个问题,看起来您提供的功能不受支持。
在这种情况下,您可以通过ReadableRepository
扩展基本接口UpdateableRepository
。
但是,如果由于某种原因您需要为存储库添加更多属性,您可以考虑为每个属性创建单独的接口(IDoable1
,IDoable2
,...,{{1}并且让你的具体类实现他们需要的东西。