【发布时间】:2015-09-24 22:37:41
【问题描述】:
总的来说,我的问题是关于最佳实践和效率。今天,我和老师讨论了 MVC Legacy 中的 OOP。我们正在经历我以前的一个项目,问题是“有什么意义?” 我的项目(以及我所有的项目)的结构方式对我来说没有意义。这是一个示例,后面是我的代码。
Controller- 从表单/视图中获取字符串值并将它们传递给服务类。 Single Responsibility 会声明这就是它的全部责任,不是创建要传递的对象,而是创建一个 > 根据我的理解完全没问题。
服务类- 遵循最佳实践/单一职责,这些方法除了调用请求的方法/传递值之外不应该做任何事情。
DAO- DAO 应该负责将所有数据/对象转换为 D.B 访问器可用的形式并将它们原样返回。
但是为什么要构建一个对象只是为了拆掉它呢?尤其是当您可以将值列表作为 Map 向下传递时,所有值和列都匹配?
以下是帮助说明我的问题的代码sn-ps:
服务类:
public class ClientService {
private Client_SQL_DAO_Strategy dao;
public ClientService(Client_SQL_DAO_Strategy dao){
setDaoStrategy(dao);
}
public void sendClientToStorage(Client client) throws SQLException, ClassNotFoundException{
dao.sendClientToDatabase(client);
}
public void updateClient(List values) throws SQLException, ClassNotFoundException {
dao.updateClient(values);
}
}
DAO
public void saveClient(Client client) throws ClassNotFoundException, SQLException {
List columns = new ArrayList<>();
columns.add("Last_Name");
columns.add("First_Name");
columns.add("Business_Name");
columns.add("Phone");
List<Object> values = new ArrayList<>();
values.add(client.getClientLastName());
values.add(client.getClientFirstName());
values.add(client.getClientBusiness());
values.add(client.getClientPhone());
accessor.createRecord(TABLE_NAME, columns, values);
}
public void updateClient(List listOfValues) throws ClassNotFoundException, SQLException{
List<Object> columns = new ArrayList<>();
columns.add("Last_Name");
columns.add("First_Name");
columns.add("Business_Name");
columns.add("Phone");
int primaryKey = Integer.valueOf(listOfValues.get(0).toString());
accessor.updateRecord(TABLE_NAME, columns, listOfValues, PK_COLUMN, primaryKey);
}
比较 DAO 中提供的两种方法,哪种方法更有意义?创建客户端以将其拆除或将关联的值和列传递给访问器?这个 Map
是的,我也知道更新的技术,但在本学期的当前时间,传统是本周的课程。
【问题讨论】:
-
您能澄清一下您所说的“遗产”是什么意思吗?您是指不使用 ORM 的遗留问题吗?
-
@jrahhali 我可能使用了错误的术语并且对 ORM 的理解非常松散。我对对象关系映射的理解是一种 OOP 技术,用于在使用相似但也不同数据类型的两个系统之间转换数据,例如 java 存储日期的方式与数据库存储日期的方式。由于这是一种较老的技术,我猜“遗留”,在我使用它的意义上,意味着“老派编程技术”。
-
问题不在于它是在比较我提供的 DAO 中的两种方法。问题是,为什么在 DAO 中构建一个对象只是为了将其拆除?
-
对您的问题的简短回答是,您正在学习如何构建一个包含数百个数据库表和数千个网页的大型 OOP 系统。