如何在 Grails 中设计领域类?

2023-11-29

鉴于这些功能要求:

用户管理

  1. 行政人员
  2. 图书管理员
  3. 借款人

*用户可以选择通过OpenID登录。

物业管理

  1. Book
  2. 备忘录
  3. Circular
  4. License

通常,我会在 Java 中实现这些:

interface User {}
class Librarian implements User {}
class Administrator implements User {}
class Borrower implements User {}

class OpenID {} //all Users HAS AN OpenID attribute (NULL if non-openId login)

interface Property{}
class Book implements Property{}
class Memorandum implements Property{}
class Circular implements Property{}
class License implements Property{}

但我们的项目将使用 Groovy & Grails,我还没有使用过。我的问题是, 应该如何domain类是根据上述要求设计的吗?我无法使用接口,而且继承似乎不是一个好的做法。我的想法是使用作品,尽管我对将生成的数据库表感到非常困扰。在这种情况下,最佳做法是什么?


好吧,首先让我们纠正它,你可以使用inheritance在这种情况下。你只需要改变约定has a与 的关系is a关系。

需要注意的几个因素: 1. Grails 遵循约定优于配置的原则。 2.您可以使用GORM,它包装持久层并在Hibernate的帮助下为底层持久层创建对象映射。

根据您的功能要求:-

如果您不想拥有User作为坚持的一部分,你可以有一个abstract class User它可以保存用户的共同属性,包括openId属性。它必须被放置在src\groovy按照约定的目录(由于基类是抽象的,依赖注入将被拒绝)

同样适用于Property。抽象的Property班级在src\groovy.

现在谈到商业模式,extend每个具体实体(domain类)从abstract parent.

概括:-

  • 创建 Grails 应用程序

  • 在src\groovy下(例如我正在考虑一个基本结构):

用户.groovy:-

abstract class User{
    String name
    String emailId
    OpenID openId
}

属性.groovy:-

abstract class Property{
    String propertyName
}
  • Under grails-app/domain:

Librariran.groovy:-

class Librarian extends User{
   //Attributes specific to Librariran
   static constraints = {
   }

   static mapping = {
   }
}

书.groovy:-

class Book extends Property{
    //Attributes specific to Book
       static constraints = {
       }

       static mapping = {
       }
}

等等等等。根据 Grails 约定,grails-app/domain 下的 Groovy 对象被视为具体实体。您显然可以找到更多信息here。如果遇到场景也可以使用组合,其实我已经提到过User having OpenId.

注意:- 这是最新版本 Grails (> 2.x) 的上下文

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Grails 中设计领域类? 的相关文章

随机推荐