java中的视图模型(嵌套与否)

Posted

技术标签:

【中文标题】java中的视图模型(嵌套与否)【英文标题】:view model in java (nested or not) 【发布时间】:2014-12-17 04:35:12 【问题描述】:

我正在创建一个包含 3 个字段的网页 (login.jsp): 1) Login Id 是一个文本框 - <input type="text"> 元素 2) 密码是一个文本框 - <input type="text"> 元素 3) Language 是一个下拉列表 - <select> 元素

我正在为这个 jsp 创建一个视图模型。 jsp 将使用它来显示数据。我称它为 LoginView。我认为我有两个选择:

Language 字段创建一个单独的类:

public class LoginView implements java.io.Serializable ¨
    public String loginId;
    public String password;
    public List<LoginViewLanguage> loginViewLanguageList;

public class LoginViewLanguage implements java.io.Serializable ¨
    public String languageId;
    public String languageDescription;

或者为 Language 字段创建一个内部类:

public class LoginView implements java.io.Serializable ¨
    public String loginId;
    public String password;
    public List<LoginViewLanguage> loginViewLanguageList;

    class LoginViewLanguage 
        public String languageId;
        public String languageDescription;
    

哪个是正确的方法,为什么?

谢谢

【问题讨论】:

使用枚举作为您的语言。 语言数据将来自数据库。有一个表 code_language,其中包含 language_id int、language_description varchar(50) 和 active_flag 位列。我将从该表中选择 active_flag = 1 的语言。所以我认为我不能将枚举用于语言。对吗? 是的,您的权利,但下次请提供更清晰的信息。会删除我的答案。 :) XD 会考虑另一种解决方案 在我看来,我更喜欢使用单独的类来实现可重用性。因为当你创建一个内部类时,这意味着它只对你创建它的类可见,并且在同一个包上取决于它的访问修饰符 【参考方案1】:

当使用仅限于容器类时,内部类更有意义,例如事件处理。 在您的情况下,如果语言是 id 和描述的静态列表,那么您可以将其作为 Enum 内部/独立,具体取决于项目其他部分的使用情况。

【讨论】:

语言不是 id 和描述的静态列表。它来自数据库。对于一家公司,可能只定义一种语言:1,英语。而对于另一家公司,可能定义了两种语言:1,西班牙语和2,英语 从您的描述看来,您在整个项目中都需要语言,您应该将语言作为一个单独的类,将耦合保持在最低限度 @srh 在这种情况下,我会让LoginViewLanguage 成为一个完全独立的***类,并在应用启动时在应用级别填充它(使用ServletContextListener)。 语言有一个单独的数据模型类。 public class CodeLanguage implements java.io.Serializable private int languageId; private String languageDescription; private boolean activeFlag; // getters and setters @srh 您需要在 LoginView 中包含此类语言对象的列表。

以上是关于java中的视图模型(嵌套与否)的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套 SQL 的视图模型中的 LINQ 数据 [重复]

Rails视图中的嵌套模型

Mvc 列出嵌套在 Viewmodel 中的多个视图

MVC Razor 视图嵌套 foreach 的模型

使用视图控制器淘汰嵌套的可观察对象

嵌套模型/视图架构