我使用Spring MVC和常规JDBC。
我刚刚了解到我应该将业务流程分为层,这些层是表示层,控制器层,服务层和存储库/ DAO层。现在假设我有一个名为Person
的实体,可以有多个Jobs
。 Job
本身是另一个拥有自己属性的实体。根据我收集的内容,存储库层只管理一个实体。现在我有一个包含另一个实体的实体。我在哪里“加入”他们?服务层?
假设我想要person
job
尚未知道(延迟加载)。但是系统可能会询问该特定job
的{{1}}后来会是什么。在这种情况下,每个层的作用是什么?
如果我需要在此问题中添加任何细节,请与我们联系。
答案 0 :(得分:0)
在典型的OOP中,对象之间的关系是通过创建关联来实现的。如果Job
和Person
之间的关联是多对一的。然后,您应该向Person
添加Job
的属性。另一方面,Person
和Job
之间的关联是一对多,因此您可以向Job
添加一组Person
。如果您不想加载此人的所有关联作业,则可以将此关联映射为延迟加载。默认情况下,这在ORM和JPA中使用。
class Person {
Set<Job> jobs;
}
class Job {
Person person;
}
每个层用于分离和解耦用于处理相同或不同对象的逻辑。
另一方面,用于映射对象模型的对象在每个图层上可能不同,您需要在需要更新模型时转换数据。它取决于用于持久层的持久性框架的实现。拥有服务层,您可以从持久层实现中进行抽象,如果您最近更改了持久性框架,则封装在服务层中的业务逻辑不会更改。表示层还可以包含自己的对象,称为用于处理表示层的不同方面的视图对象。创建,操作和呈现这些对象的逻辑属于表示层,该表示层显然由表示框架实现。
答案 1 :(得分:0)
我可以从问题陈述中收集到: -
更简洁的方法是拥有一个封装此映射的实体(及其表): -
class Employment{
private Person person;
private Job job;
}
现在您可以从两端进行查询。如: -
这可能会产生0行或更多行。
每一行都会有映射Job的信息。
因此,在这种情况下,您将拥有类似的服务/存储库: -
interface EmployementRepository{
// CRUD methods on Employement.
}
答案 2 :(得分:0)
这听起来像是在处理多对多关系。如果多人可以拥有相同的工作,则需要创建联结表。
数据模型
CREATE TABLE PERSON(PERSON_ID, OTHER_FIELDS);
CREATE TABLE JOB(JOB_ID, OTHER_FIELDS);
CREATE TABLE PERSON_JOB(PERSON_JOB_ID, PERSON_ID, JOB_ID, OTHER_FIELDS);
<强>实体强>
class Person{
List<Job> jobs = new ArrayList<Job>();
}
class Job{
List<Person> workers = new ArrayList<Person>();
}
在repository / dao层中,您需要创建逻辑以使用联结表填充这两个实体之间的关联。