Справка по отображению n-уровневых объектов - PullRequest
1 голос
/ 04 ноября 2008

Интересно, если мой подход в порядке или может быть улучшен:

Public Class Company  
  private _id as Integer
  private _name as String
  private _location as String

  Public Function LoadMultipleByLocation(Byval searchStr as String) as List(Of Company)
     'sql etc here to build the list
  End Function
End Classs

Мысли о том, чтобы подобный объект отображался?

Ответы [ 2 ]

1 голос
/ 04 ноября 2008

В этом случае вы должны создать экземпляр Company, а затем использовать его для возврата списка компаний?

Некоторые люди делают это, но я предпочитаю разделить мой объект данных в тупой контейнер данных:

public class Company : EntityBase
{
     private int _id;
     private string _name;
     private string _location;
}

Я использую базовый класс (EntityBase), который содержит общие методы для преобразования тупой сущности обратно в коллекцию SQLParameters (для сохранения), а также для ее создания из передаваемого в SQLReader (это переопределяется в каждом конкретном классе, сопоставить читателя с частными переменными).

Затем я предпочитаю использовать класс «Service», который фактически выполняет вызовы базы данных, создает соответствующий объект сущности и возвращает его. Я могу использовать здесь полиморфизм для значительного уменьшения дублирования кода.

0 голосов
/ 04 ноября 2008

@ Dan

EntityBase будет базовым классом, который будет наследовать каждый объект сущности, что-то вроде:

public class EntityBase
{
     public virtual string SaveSproc { get; }

     public virtual void LoadFromReader(SqlReader reader)
     {
     }

     public virtual void Save()
     {
         List<SqlParameters> paramList = = this.CreateParamsList();
         DoSqlStuff(this.SaveSproc, paramList);
     }

     public virtual List<SqlParamenter> CreateParamsList()
     { 
          return new List<SqlParameter>
     }
}

public Company : EntityBase
{

    private string _data;

public override string SaveSproc { get { return "SprocThatSaves"; } }

    public override List<SqlParameter> CreateParamList()
{   
    List<SqlParameter> param = new List<SqlParameter>
    param.Add(new SqlParameter("Data",_data);

    return param;   
}

public override void LoadFromReader(SqlReader reader)
{
    // PsuedoCode
    _data = reader["data"];
}
}

Теперь ваш уровень БД может получить читателя с данными компании и сделать что-то вроде:

Company = new Company();
Company.LoadFromReader(reader);

И в другом месте, чтобы сохранить ваши данные обратно:

Company.Save();
...