MVC模式中模型和实体之间有什么区别?

时间:2017-03-04 07:15:18

标签: java mysql model-view-controller

假设我有一个像Student这样的实体并且使用MVC模式我在我的项目中创建了一个学生模型。但有一些时候,我创建一个表,我得到另一个实体的外键。 (一对多关系 - 学生借书) 因此,当我创建Book Model时,我必须包含外键作为Book类的属性。那么它是否违反了MVC模式? 请帮忙。 如何使用MVC实现这一点?

2 个答案:

答案 0 :(得分:2)

不,它没有违反MVC。

根据定义,MVC中的“Model”表示应用程序中数据的逻辑表示。建立实体之间的关系(在您的情况下,学生和书籍)是一种表示学生信息的方式。

说,我正在“学校图书馆”上建立一个网络应用程序。

  1. 实体(学生和书籍)关系将成为“模特”的一部分。
  2. 现在,有一个门户网站(或简称一个网页),学生可以查看他借来的书,是一个“视图”。
  3. 连接Model和View的类(从模型中获取数据并将其渲染到视图的逻辑)写在“Controller”中。
  4. 检查像Django,Laravel这样的Web框架。他们遵循MVC范例来构建复杂的Web应用程序。

    希望它有所帮助。

答案 1 :(得分:1)

让我们回来吧。 " MVC"是"模型 - 视图 - 控制器&#34 ;;三者中的每一个都是不同的部分。模型是问题的主题,是描述程序世界的部分。该模型包括您的问题空间的名词,形容词和动词,或者#34;话语领域"。仅使用属于该域的名词,形容词和动词。表示具有属性(名词和形容词)和行为(动词)的演员或实体(名词)的领域相关类型的结构是你的模型。

在你的域名中,你提到了两个名词和一个动词。 "学生借书Book"。现在我从未见过有外国钥匙的学生。 (除非是交换学生女朋友的公寓。)也不是书。所以"外键"不是该模型的一部分。

这是一个模特:

public interface Person {
  String getName();
}

public interface Borrower<T> {
  void borrow(T thing);
}

public interface Replacer<T> {
  void replace (T thing);
}

public class Student implements Person,
    Borrower<Book>, Replacer<Book> {
  private final Set<Book> bookshelf = new HashSet<>();

  public Collection<Book> getBookshelf() {
    return Collections.unmodifiableSet(bookshelf);
  }

  // more implementation
}

我故意将模型分解为单抽象方法(SAM)接口。但是,Person接口通常不是一个接口。动作方法,及物动词如&#34;借&#34;和&#34;替换&#34;,应该是SAM接口,部分是为了支持lambda,部分是为了让你的模型清晰易懂。

相关问题