在 UML class 图中,在何处显示域 class 的 DAO 方法
In UML class diagram, where to show DAO methods of a domain class
我正在尝试构建 UML class 图。我对 UML 有点陌生,请原谅我的无知。
我有一个域 class User
具有以下属性:
- 用户名;数据类型为字符串;标识符
- 密码;数据类型为字符串
- 活跃;数据类型为 bool
- 已锁定;数据类型为 bool
- 密码到期日期;数据类型是 DateTime
这就是我用 UML 构建它的方式:
现在我想在UMLclass图中定义这个User
class的这些操作:
- 通过提供的标识符从数据库中检索用户对象。
- 将检索到的用户对象的密码与提供的匹配
密码。
- 检查检索到的用户是否有效。
- 检查检索到的用户是否被锁定。
- 检查取回的用户密码是否已过期。
- 在数据库中插入一个用户对象。
- 更新数据库中的用户对象。
- 从数据库中删除用户对象。
这就是我用 UML 构建它的方式:
但是我对方法#1 很困惑"Retrieve a User object by a supplied identifier from database"。
所有其他方法都在单个 User
对象上工作,这意味着单个 User
对象已经从数据库或其新对象中检索到。
但是方法 #1 对于处理 User
对象的集合是有意义的,这意味着数据库中已经存在的所有用户对象。
有道理吗?还是不匹配?如果是,我该如何解决?
谢谢
更新
感谢您提到 UML class 图中的 class 级操作。我不知道他们。
所以我进行了更改,这是 User
的最新 UML class 图 class:
现在正确吗?
我想我会将其建模为 static 或 Class 操作。此类操作不需要 User
实例。
静态方法的 UML 表示法是带下划线的。
O.T。我还将 Add()
和 Update()
合并为一个 Save()
操作。跟踪对象的持久状态不取决于对象的用户。这将避免诸如添加已存在的对象或更新 non-existent 对象等问题。
请注意,这不仅是您的方法 #1,也是您 AddUser
到 "work on a collection of User objects which means all the user objects which already exist in the database" 的方法。事实上,所有 CRUD 方法都是不同的,因为它们适用于相应的数据库 table population.
使用 DAO 方法,您将以 class-level("static")方法的形式定义您的 CRUD 数据访问方法 retrieveUser
和 deleteUser
,因为它们不不要使用上下文对象(正如 Geert Bellekens 所说),而是将对象 ID(在您的情况下 UserName
)作为其唯一参数。另外两个 CRUD 方法,createUser
和 updateUser
,通常也不适用于上下文对象(在您的例子中是 User
对象),而是具有通过输入的数据值的参数一个用户界面。在 createUser
(您的 AddUser
)的情况下,仅当数据值满足模型 class User
中定义的所有约束时,才会创建 User
对象.在 updateUser
的情况下,只有当更改的值不违反任何约束时才会执行更新。
我正在尝试构建 UML class 图。我对 UML 有点陌生,请原谅我的无知。
我有一个域 class User
具有以下属性:
- 用户名;数据类型为字符串;标识符
- 密码;数据类型为字符串
- 活跃;数据类型为 bool
- 已锁定;数据类型为 bool
- 密码到期日期;数据类型是 DateTime
这就是我用 UML 构建它的方式:
现在我想在UMLclass图中定义这个User
class的这些操作:
- 通过提供的标识符从数据库中检索用户对象。
- 将检索到的用户对象的密码与提供的匹配 密码。
- 检查检索到的用户是否有效。
- 检查检索到的用户是否被锁定。
- 检查取回的用户密码是否已过期。
- 在数据库中插入一个用户对象。
- 更新数据库中的用户对象。
- 从数据库中删除用户对象。
这就是我用 UML 构建它的方式:
但是我对方法#1 很困惑"Retrieve a User object by a supplied identifier from database"。
所有其他方法都在单个 User
对象上工作,这意味着单个 User
对象已经从数据库或其新对象中检索到。
但是方法 #1 对于处理 User
对象的集合是有意义的,这意味着数据库中已经存在的所有用户对象。
有道理吗?还是不匹配?如果是,我该如何解决?
谢谢
更新
感谢您提到 UML class 图中的 class 级操作。我不知道他们。
所以我进行了更改,这是 User
的最新 UML class 图 class:
现在正确吗?
我想我会将其建模为 static 或 Class 操作。此类操作不需要 User
实例。
静态方法的 UML 表示法是带下划线的。
O.T。我还将 Add()
和 Update()
合并为一个 Save()
操作。跟踪对象的持久状态不取决于对象的用户。这将避免诸如添加已存在的对象或更新 non-existent 对象等问题。
请注意,这不仅是您的方法 #1,也是您 AddUser
到 "work on a collection of User objects which means all the user objects which already exist in the database" 的方法。事实上,所有 CRUD 方法都是不同的,因为它们适用于相应的数据库 table population.
使用 DAO 方法,您将以 class-level("static")方法的形式定义您的 CRUD 数据访问方法 retrieveUser
和 deleteUser
,因为它们不不要使用上下文对象(正如 Geert Bellekens 所说),而是将对象 ID(在您的情况下 UserName
)作为其唯一参数。另外两个 CRUD 方法,createUser
和 updateUser
,通常也不适用于上下文对象(在您的例子中是 User
对象),而是具有通过输入的数据值的参数一个用户界面。在 createUser
(您的 AddUser
)的情况下,仅当数据值满足模型 class User
中定义的所有约束时,才会创建 User
对象.在 updateUser
的情况下,只有当更改的值不违反任何约束时才会执行更新。