假设我有一个像Student这样的实体并且使用MVC模式我在我的项目中创建了一个学生模型。但有一些时候,我创建一个表,我得到另一个实体的外键。 (一对多关系 - 学生借书) 因此,当我创建Book Model时,我必须包含外键作为Book类的属性。那么它是否违反了MVC模式? 请帮忙。 如何使用MVC实现这一点?
答案 0 :(得分:2)
不,它没有违反MVC。
根据定义,MVC中的“Model”表示应用程序中数据的逻辑表示。建立实体之间的关系(在您的情况下,学生和书籍)是一种表示学生信息的方式。
说,我正在“学校图书馆”上建立一个网络应用程序。
检查像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,部分是为了让你的模型清晰易懂。