Оставайтесь сухими с DTO& #39;s

Сейчас я создаю веб-интерфейс для FreeRADIUS . Это просто небольшое приложение для упрощения мутаций для ленивых сотрудников Shell -и SQL -lazy co -. Я создал модель Entity Framework для базы данных и хочу инкапсулировать ее с помощью шаблона фасада. Поэтому я создал класс DTO с именем Account . Он хранит данные, агрегированные из трех разных таблиц. Вот как выглядит Account.cs:

public class Account
{
    public int? Id { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string GroupName { get; set; }
    public string IpAddress { get; set; }
    public string Route { get; set; }
}

Это метод, который я собираю и возвращаю одиночный DTO учетной записи -.

Account Get(string userName)
{
    // Get the values from the database.
    var check = _entities.Checks.Single(x => x.UserName == userName);
    var userGroup = _entities.UserGroups.Single(x => x.UserName == userName);
    var ipReply = _entities.Replies.Single(x => x.UserName == userName && x.Attribute == "Framed-IP-Address");
    var routeReply = _entities.Replies.Single(x => x.UserName == userName && x.Attribute == "Framed-Route");

    // Populate the DTO
    var account = new Account
    {
        UserName = check.UserName,
        Password = check.Value,
        GroupName = userGroup.GroupName
    };

    if (ipReply != null) account.IpAddress = ipReply.Value;
    if (routeReply != null) account.Route = routeReply.Value;

    return account;
}

А это метод обновления базы данных пользователем -представленной учетной записью -DTO

void Update(Account account)
{
    // Get the values from the database. Again.
    var check = _entities.Checks.Single(x => x.UserName == account.UserName);
    var userGroup = _entities.UserGroups.Single(x => x.UserName == account.UserName);
    var ipReply = _entities.Replies.Single(x => x.UserName == account.UserName && x.Attribute == "Framed-IP-Address");
    var routeReply = _entities.Replies.Single(x => x.UserName == account.UserName && x.Attribute == "Framed-Route");

    // Update the possible attributes
    check.Value = account.Password;
    userGroup.GroupName = account.GroupName;
    ipReply.Value = account.IpAddress;
    routeReply.Value = account.Route;

    _entities.SaveChanges();
}

Как видите, я использую точно такой же код для извлечения данных из базы данных. Как я могу высушить этот код?

6
задан Sandro 23 April 2012 в 15:50
поделиться