2

POCOとFluentNHibernateを使用して、Userのようなオブジェクトを取得し、それにさまざまなプロパティを与えることができるようにしたいと思います。これらのオブジェクトが、一般的なプロパティではなく、それらのプロパティに焦点を合わせられるようにしたいと思います。現在、CreatedDateTimeやModifiedDateTimeなどの監査済みプロパティを持つ機能をエンティティに与えるために派生できるAuditableEntityがありますが、すべてのオブジェクトにIDを実装する必要性を排除する機能も必要です。他のベースオブジェクトの一部になることができるので、このオブジェクトにはGUID IDがあり、これにはint IDがあり、このオブジェクトにはIDがないと言えます。現在、私のUserオブジェクトは次のようになっています。

User.cs

namespace ZeroBase.Domain.Entities
{
public class User : AuditableEntity<User>
{
    public virtual Guid Id { get; set; }
    public virtual string Username { get; set; }
    public virtual string Password { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
    public virtual string EmailAddress { get; set; }
    public virtual IEnumerable<Comment> Comments { get; set; }
}
}

私のUserMapは次のようになります。

UserMap.cs

namespace ZeroBase.Infrastructure.Data
{
public class UserMap : AuditMap<User>
{
    public UserMap()
    {
        Id(x => x.Id)
            .Column("Id")
            .GeneratedBy.Guid();
        Map(x => x.Username);
        Map(x => x.Password);
        Map(x => x.FirstName);
        Map(x => x.LastName);
        Map(x => x.EmailAddress);
        HasMany(x => x.Comments);
        Table("Users");
    }
}
}

とにかく、ある種の汎用基本クラスでIdの作成を処理し、オブジェクトが監査可能になるために継承できる別のクラスを持っているのでしょうか。

4

1 に答える 1

2

AuditableEntityIDのないクラスに使用していますか?Entityクラスがアイデンティティを持っていることを意味します。これに基づいて、IdプロパティをAuditableEntityに追加できると思います。

値オブジェクトのように、アイデンティティのないクラスに使用している場合は、別の基本クラスを作成します。このようなものは意味がありますか?

class Entity {
    Guid Id { get; set; } 

    public Entity() {
        Id = Guid.NewGuid();
    }
}

interface IAuditable<T> {
    DateTime CreatedAt {get; set; }
    // ...
}

class AuditableEntity<T> : Entity, IAuditable<T> {
    DateTime CreatedAt { get; set; }
}

class AuditableValueObject<T> : IAuditable<T> {
    DateTime CreatedAt { get; set; }
}

// Class that has both an identity and is auditable
class User : AuditableEntity<User> {
    // ..
}

// Class without an identity but auditable
class Money : AuditableValueObject<Money> {
    // ..
}

// Class with an identity but not auditable
class Customer : Entity {
    // ..
}

注:エンティティ、値オブジェクトなどは、ドメイン駆動設計(DDD)の用語です。

于 2012-06-08T20:08:57.077 に答える