MVC遗留中的javaoop

MVC遗留中的javaoop,java,oop,legacy,Java,Oop,Legacy,总的来说,我的问题是关于最佳做法和效率。今天,我和老师讨论了MVC遗留中的OOP。我们正在看我以前的一个项目,问题是“有什么意义?” 我的项目(以及我所有的项目)的结构方式对我来说毫无意义。下面是一个示例,后面是我的代码 控制器-从表单/视图获取字符串值,并将其传递给服务类。单一责任将声明这是它的全部责任,不是创建一个要传递的对象,而是创建一个从我的理解来看是完全正确的 服务类-遵循最佳实践/单一责任,这些方法除了调用请求的方法/传递值外,不应执行任何操作 DAO-DAO应该负责将所有数据/对象

总的来说,我的问题是关于最佳做法和效率。今天,我和老师讨论了MVC遗留中的OOP。我们正在看我以前的一个项目,问题是“有什么意义?” 我的项目(以及我所有的项目)的结构方式对我来说毫无意义。下面是一个示例,后面是我的代码

控制器-从表单/视图获取字符串值,并将其传递给服务类。单一责任将声明这是它的全部责任,不是创建一个要传递的对象,而是创建一个>从我的理解来看是完全正确的

服务类-遵循最佳实践/单一责任,这些方法除了调用请求的方法/传递值外,不应执行任何操作

DAO-DAO应该负责将所有数据/对象转换为可供D.B访问器使用的形式,并将其返回

但是为什么建造一个物体只是为了拆掉它呢?尤其是当您可以将一个值列表作为Map向下传递,以便所有值和列都匹配时

以下是有助于说明我的问题的代码片段:

服务类别:

 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);

}
public void saveClient(Client-Client)抛出ClassNotFoundException、SQLException{
列表列=新的ArrayList();
列。添加(“姓氏”);
列。添加(“名字”);
列。添加(“业务名称”);
列。添加(“电话”);
列表值=新的ArrayList();
add(client.getClientLastName());
add(client.getClientFirstName());
add(client.getClientBusiness());
add(client.getClientPhone());
createRecord(表名称、列、值);
}
public void updateClient(值列表)抛出ClassNotFoundException、SQLException{
列表列=新的ArrayList();
列。添加(“姓氏”);
列。添加(“名字”);
列。添加(“业务名称”);
列。添加(“电话”);
int primaryKey=Integer.valueOf(listOfValues.get(0.toString());
updateRecord(表名称、列、值列表、主键列、主键);
}
比较DAO中提供的两种方法,哪种方法更有意义?创建客户端以将其拆下,还是将关联的值和列传递给访问器?这个Map似乎非常适合这两种方法

是的,我也知道更新的技术,但在本学期的当前时间,遗产是本周的课程。

Spring MVC实现了设计模式

控制器的职责是获取/创建/填充模型,并为视图准备环境

视图负责显示模型数据,在SpringMVC中通常是通过JSP显示的,但是您也可以指定视图类,例如,它可以执行诸如呈现Excel或PDF之类的操作

该模型实现了域逻辑。根据您的实现,这可能是一个只包含前端逻辑的“视图模型”,也可能包含真正的业务规则。这应该是一门真正的课。永远不要使用
Map
。这样使用映射会牺牲类型安全性,而不是OOP

服务类类似于外部服务协调的控制器类,如持久性、电子邮件、支付等

DAO类是一个仅用于持久性的服务提供者。它将对象表示转换为数据库操作。该层可以被ORM替换。不要在地图上走动

如果应用程序使用的唯一外部服务是持久性,则可以避免分离服务和DAO类,并推迟分离,直到需要更多服务


有关这类对象建模的更多信息,请查看。

请澄清“遗留”是什么意思?你是说“遗产”和“不使用ORM”一样吗?@jrahhali我可能使用了错误的术语,对ORM的理解非常松散。我对对象关系映射的理解是一种OOP技术,用于在两个使用类似但也不同数据类型的系统之间转换数据,例如java存储日期的方式与数据库存储日期的方式。由于这是一种较老的技术,我猜“遗留”在我使用它的意义上,意味着“老式编程技术”。问题不在于此,而是在于比较我提供的DAO中的两种方法。问题是,为什么构建一个对象只是为了在DAO中分解它?简单的回答是,您正在学习如何构造一个具有数百个数据库表和数千个网页的大规模OOP系统。