我目前正在从事一个大型项目,其中包括三种不同类型的CRUD。我的ICrud接口包含<t>
,用于在实现它时放入所需的数据类型。
我的问题是,当我在第三个类中实现它时,我希望使其中一个方法(readAll)使用不同于其他4种方法(CRUD)的另一种数据类型。这有可能吗?
现在,我有readAll方法返回匹配的数据类型,但由于未使用它而返回null,而是创建了另一个方法readall2(),该方法确实返回了正确的数据类型,但不属于我的接口。
ICrud界面:
public interface ICrud<T> {
List<T> readAll();
List<T> read(int cvr);
void create(T t);
void delete(int cvr);
void update(T t, int id);
}
我如何实现它:
@Service
public class AdminRepository implements Ilogin<Admin>, ICrud<Driver>,
IAdmin<Company>
我希望如何使用readAll:
public List<Company> readAll()
(不是驱动程序,而是界面中所有其他方法的驱动程序)
我想补充一点;起初,我在iAdmin中拥有readAll,因为它需要Company,但是我在其他6个实现ICrud的类中也拥有这个readall方法。
谢谢你的帮助。 :)
最佳答案
您有设计问题,我建议您通过以下链接阅读有关SOLID原则的信息:
https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design
在正确的设计中,如果您将不实现接口的方法之一(您的情况下为readAll),则根本不要实现接口。这意味着您混合了各种顾虑,并且您的界面必须拆分为较小的界面。也许将readall分成一个单独的界面可以解决您的问题。例如,代替ICrud,创建一个仅用于写入操作的接口,一个用于读取操作的接口,一个用于readAll的接口。
有很多方法可以解决保留接口ICrud的问题,例如使用对象作为重运行类型,或者使用泛型或动态。但是从根本上解决您的问题的原因是遵循我上面提到的一个好的设计。