我正在构建我的第一个真正的Java应用程序,我对遵循良好的面向对象设计实践感到困惑。
我的应用程序允许瑜伽教练设计瑜伽课程。有一个包含五个表的MySQL数据库:
会话由部分组成,部分由姿势组成。我故意选择在此设计中使用数据库而不是列表或数组,以便学习如何将数据库与Java集成。
以下是我的问题: 是否真的有必要从姿势,部分和会话中制作物体? 它们仅仅是数据,它们没有任何形式的行为。我的应用程序中的真实对象是用户用来将这些姿势和部分组合成瑜伽课程的窗口和工具。如果我强制每个姿势和部分和会话成为一个对象,我的代码似乎会变得不必要地膨胀和复杂。我意识到我可能会在这里征求意见,而这一点在这个论坛上通常是不鼓励的。但我的目的是理解和遵循面向对象的设计,在我看来是一个阴暗的区域。
答案 0 :(得分:3)
要回答您的问题,请为每个人创建对象。面向对象编程的主要原则是具有不同的“类型”对象和围绕它们做的东西(行为 - 方法)。
我建议你看一下ORM的概念。 ORM是将对象映射到其持久表示的过程,即数据库表。
如果使用普通JDBC,则可能需要编写大量本机SQL和代码以从表中提取单个列的值。当架构的复杂性增加时,维护这些查询将变得很困难。
使用ORM,您可以编写简单的java程序来获取和保存来自持久层的数据。
您可以通过this thread查看ORM优势
Hibernate是一个适用于Java的优秀框架,可以执行ORM
答案 1 :(得分:2)
1)如果您使用 Hibernate 或其他 ORM ,必须使用 POJO 。别无他法。
2)如果你直接使用 JDBC ,例如 Spring JDBC ,你可以使用maps(SimpleJdbcTemplate
在许多函数中返回map等),但是阅读POJO字段比从地图读取字段要快得多且不易出错。地图在内存中占据更多位置。
3)如果你使用 JSF ,你需要带有getter和setter的POJO,理论上map可以用于只读,但语法模糊不清。
重申,Java中用于存储数据的POJO没有好的替代方案。在某些情况下,您可以使用地图,但只有在数据结构是动态的或临时解决方案时它才有用。