gpt4 book ai didi

grails - 如何在 Grails 中设计领域类?

转载 作者:行者123 更新时间:2023-12-01 07:40:36 25 4
gpt4 key购买 nike

鉴于这些功能要求:

用户管理

  • 管理员
  • 图书管理员
  • 借款人

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

    属性(property)管理
  • 预订
  • 备忘录
  • 通函
  • 许可证

  • 通常,我会在 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。我的问题是,
    应该怎么做域名 类是根据上述要求设计的吗?我不能使用接口(interface),而且似乎继承不是一个好习惯。我的想法是使用 作文 ,尽管我对将生成的数据库表感到非常困扰。在这种情况下,最佳做法是什么?

    最佳答案

    那么首先让我们更正它,您可以使用inheritance在这种情况下。您只需要更改 has a 的约定与 is a 的关系关系。

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

    根据您的功能要求:-

    如果您不想拥有 User作为持久性的一部分,您可以使用 abstract类(class) User它可以保存用户的常见属性,包括 openId属性。必须放在src\groovy按照约定的目录(由于基类是抽象的,依赖注入(inject)将被拒绝)
    Property 也是如此。 .摘要 Property类(class) 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
    }
  • grails-app/domain 下:

  • Librariran.groovy:-
    class Librarian extends User{
    //Attributes specific to Librariran
    static constraints = {
    }

    static mapping = {
    }
    }

    Book.groovy:-
    class Book extends Property{
    //Attributes specific to Book
    static constraints = {
    }

    static mapping = {
    }
    }

    等等等等。 grails-app/domain 下的 Groovy 对象按照 Grails 约定被视为具体实体。您显然可以找到更多信息 here .如果遇到场景也可以使用合成,事实上我已经在 User 中提到过。有 OpenId .

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

    关于grails - 如何在 Grails 中设计领域类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16312180/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com