【发布时间】:2015-04-24 10:51:57
【问题描述】:
我是 Java 新手,我正在编写一个这样的模块化应用程序:
************* ******* ***********
* * * * * Data *
* Front-end * -------- * API * ------- * Handler *
* * * * * *
************* ******* ***********
本质上,我希望能够定义一个包含 N 个类的 API,然后让一个“数据处理程序”模块处理将对象存储在某个地方(例如数据库),而前端不需要知道任何事情是如何实现的。
假设我的 API 中定义了两个类:Contract 和 Company。 我希望前端能够执行以下操作:
myContract = new Contract();
myCompany = new Company();
myContract.setCompany(myCompany);
myContract.save();
myCompany.save();
这样,将来我可以更改存储数据的方式(数据处理模块),而无需更改前端的任何代码。
为此,我在 API 模块中为 Contract 和 Company 编写了两个接口。 然后,在数据处理模块中,我编写了实现两个接口的类:DbContract 和 DbCompany。
现在,我遇到了问题,因为我在 Contract 接口中定义了 getter/setter 方法:
public interface Contract {
public Company getCompany();
public void setCompany(Company company);
}
并在 DbContract 中将它们实现为:
public class DbContract implements Contract {
private DbCompany company;
@Override
public Company getCompany() {
return this.company;
}
@Override
public void setCompany(Company company) {
this.company = company;
}
}
但是,我到处都遇到类类型不匹配错误... 我完全错过了重点吗?我应该怎么做呢?
提前感谢您的帮助。
【问题讨论】:
-
在
setCompany中,您不能在不进行强制转换的情况下将Company分配给DBCompany引用。您何时/如何创建DBCompany? -
我的想法是在 API 中有一个名为 Manager 的类,它具有实例化和返回对象的方法。像
public Contract createContract() { return new DbContract(); }这样的东西。演员阵容是解决这个问题的正确方法吗? -
API 的主要目的是隐藏实现细节,使
Frontend只对接口进行操作。通过在那里创建对象,你就打破了这个规则。 -
谢谢@SashaSalauyou,你会怎么做?
-
您能举个例子吗?正如我所说,我上周确实开始使用 Java 进行编码,但我仍然有点迷茫。感谢您的帮助!
标签: java modularity decoupling