[g9] Элементы равномерно распределены внутри контейнера выравнивания вдоль поперечной оси. Интервал между каждой парой соседних предметов одинаков. Первый элемент находится на одном уровне с основным краем, а последний элемент находится на одном уровне с основным краем. [/G9] blockquote>
Существует несколько причин, это обычно не считают хорошим дизайном, некоторые из которых как порождение трудного поблочного тестирования и трудности ошибок из-за неправильного обращения были уже упомянуты.
Главная причина, которую я принял бы решение не сделать так, состоит в том, что Ваш объект и уровень доступа к данным теперь очень сильно связаны, что означает, что любое использование того объекта за пределами него, которого первоначальный проект требует значительный, переделывает. Как пример, что, если Вы столкнулись с экземпляром, где необходимо было использовать тот объект без каких-либо значений, присвоенных, например, сохранять новый экземпляр того класса? теперь или необходимо перегрузить конструктора и затем удостовериться, что вся другая логика обрабатывает этот новый случай, или наследуйте и переопределите.
Если бы объект и доступ к данным были отделены затем, то Вы могли бы создать экземпляр и затем не гидратировать его. Или если Ваш имеют другой проект, который использует те же объекты, но использует другой слой персистентности затем, объекты являются допускающими повторное использование.
Сказав, что я выбрал более легкую путь из связи в проектах в прошлом :)
Хорошо.. Я не был бы. Но с другой стороны мой подход обычно включает класс, НЕ являющийся ответственным за получение его собственных данных.
Да, Вы, CAN делает это, но это не лучший дизайн и обработка ошибок в конструкторах, не так опрятны как в другом месте.
Это будет также мешать писать модульные тесты на класс, поскольку Вы не сможете вынудить класс использовать Ложную/Тупиковую версию класса дб. Посмотрите здесь: http://en.wikipedia.org/wiki/Dependency_injection
Можно использовать доступный шаблон, если Вы обращаетесь к соединению с БД:
public class MyClass : IDisposable
{
private Database db;
private int? _id;
public MyClass()
{
db = new Database();
}
public int Id
{
get
{
if (_id == null) _id = db.GetIdFor(typeof(MyClass));
return _id.Value;
}
}
public void Dispose()
{
db.Close();
}
}
Использование:
using (var x = new MyClass())
{
/* ... */
} //closes DB by calling IDisposable.Dispose() when going out of "using" scope
Единственная проблема, о которой я могу думать с этим подходом, состоит в том, что любые ошибки от инициализации DB будут распространены как исключения от конструктора.
Почему кто-либо хотел бы использовать фиктивный объект / тупик вместо реальной вещи? Вы согласились бы, что автопроизводители должны использовать модели строительного картона для испытаний на ударную прочность при столкновении?