Так что я создавал уровень доступа к данным через TDD и подошел к некоторой проблеме. Я бы предпочел не идти по неверному пути, поэтому я решил попросить вас, ребята, посмотреть, соответствуют ли мои мысли чистой архитектуре.
Методы в моем уровне доступа к данным (DAL для краткости) довольно просты. Они соответствуют хранимым процедурам в базе данных (нет другого способа вызвать ее, чтобы сохранить вещи в чистоте), и они содержат те же параметры, что и процедуры. Затем они просто подключаются к базе данных и возвращают результат запроса. Вот один пример:
public int DeleteRecord(int recordId)
{
recordId.RequireThat("recordId").NotZeroOrLess();
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter { ParameterName = "@RecordId", SqlDbType = SqlDbType.Int, Direction = ParameterDirection.Input, Value = recordId});
return this.ExecuteNonQuery("DeleteRecord", parameters.ToArray());
}
Это прекрасно работает для этого типа метода, потому что я не делаю ничего значимого с набором результатов. Я просто хочу убедиться, что команда сработала, поэтому я верну результат незапроса, который касается только затронутых строк, и я могу проверить логику, используя это число.
Однако, скажем, в другом методе DAL, я хочу загрузить запись. Процедура Моей нагрузки будет выполнение selects
против кучи таблиц и возвращая DataSet
, но я боролся с ли объектами моего DAL должен создать бизнес в рамках метода с использованием DataSet
, или если мой Business Objects сами должен просто иметь Load()
метод , который получает DataSet
от DAL, а затем в основном заполняет себя.
Выполнение этого через DAL приведет к меньшему количеству логики в бизнес-объектах (даже если это всего лишь логика выбора, это по-прежнему логика), но немного соберет DAL и заставит его почувствовать, что он действительно делает то, что не должен ' не делать.
Что вы ребята думаете?