liangshiwei
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
11 additions and
11 deletions
-
docs/zh-Hans/Value-Objects.md
|
|
|
@ -1,18 +1,18 @@ |
|
|
|
## 值对象 |
|
|
|
|
|
|
|
> 一个对象,表示领域的描述方面,没有概念上的身份被称为 值对象。 |
|
|
|
> 一个对象,表示领域的描述方面,没有概念上的身份被称为 值对象. |
|
|
|
> |
|
|
|
> (Eric Evans) |
|
|
|
|
|
|
|
属性相同但`Id`不同的两个[实体](https://docs.abp.io/zh-Hans/abp/latest/Entities) 被视为不同的实体。但是,值对象没有`Id` |
|
|
|
属性相同但`Id`不同的两个[实体](https://docs.abp.io/zh-Hans/abp/latest/Entities) 被视为不同的实体.但是,值对象没有`Id` |
|
|
|
|
|
|
|
## 值对象的类 |
|
|
|
|
|
|
|
值对象是一个抽象类,可以继承它来创建值对象类 |
|
|
|
值对象是一个抽象类,可以继承它来创建值对象类 |
|
|
|
|
|
|
|
**示例: An Address class** |
|
|
|
|
|
|
|
```c# |
|
|
|
```csharp |
|
|
|
public class Address : ValueObject |
|
|
|
{ |
|
|
|
public Guid CityId { get; private set; } |
|
|
|
@ -47,13 +47,13 @@ public class Address : ValueObject |
|
|
|
|
|
|
|
- 值对象类必须实现 `GetAtomicValues()`方法来返回原始值 |
|
|
|
|
|
|
|
### 等价值 |
|
|
|
### ValueEquals |
|
|
|
|
|
|
|
`ValueObject.ValueEquals(...)` 用于检测两个值是否相等 |
|
|
|
|
|
|
|
**示例: Check if two addresses are equals** |
|
|
|
|
|
|
|
```c# |
|
|
|
```csharp |
|
|
|
Address address1 = ... |
|
|
|
Address address2 = ... |
|
|
|
|
|
|
|
@ -63,13 +63,13 @@ if (address1.ValueEquals(address2)) //Check equality |
|
|
|
} |
|
|
|
``` |
|
|
|
|
|
|
|
## 最佳的做法 |
|
|
|
## 最佳实践 |
|
|
|
|
|
|
|
以下是使用值对象时的一些最佳实践: |
|
|
|
|
|
|
|
- 如果没有充分的理由将值对象设计为可变的,则将其设计为**不可变**(如上面的地址)。 |
|
|
|
- 构成一个值对象的属性应该形成一个概念整体。例如:CityId、Street和Number不应是个人实体的单独属性。这也使Person实体更简单。 |
|
|
|
- 如果没有充分的理由将值对象设计为可变的,则将其设计为**不可变**(如上面的地址). |
|
|
|
- 构成一个值对象的属性应该形成一个概念整体.例如:CityId,Street和Number不应是个人实体的单独属性.这也使Person实体更简单. |
|
|
|
|
|
|
|
## 另请参见 |
|
|
|
## 另请参阅 |
|
|
|
|
|
|
|
- [实体类](https://docs.abp.io/zh-Hans/abp/latest/Entities) |
|
|
|
- [实体](Entities.md) |
|
|
|
|