, почему сообщество DDD не использует пакетные функции
blockquote>Я думаю, вы обнаружите, что хорошие проекты следуют пакетным функциям.
В примерах вы можете обнаружить, что за ним не следят. Щедрая интерпретация заключается в том, что авторы пытаются упростить распознавание разделения интересов и направлений стрелок зависимости.
Менее щедро? авторы не обращают внимания или не знают лучше.
Должны ли мы использовать пакетные функции с DDD? Если да, то как это сделать?
blockquote>Да, и почти так же, как если бы вы не не делали DDD, вы бы делали пакет по функциям. Это ортогональные проблемы.
using (OracleConnection connection = new OracleConnection(connectionString))
{
using (OracleCommand command = new OracleCommand(sql, connection))
{
using (OracleDataReader reader = cmd.ExecuteReader())
{
}
}
}
Если это реализует IDisposable, и если Вы создаете его, то помещенный он в блок использования.
Оба ответа находятся в значительной степени на цели. Вы всегда хотите назвать.Dispose () на любом объекте IDisposeable. Путем обертывания в "использовании" Вас высокий компилятор, чтобы всегда реализовать try/finialy блок для Вас.
1 замечание, если Вы хотите избежать вложения, можно написать тот же код как это:
using (OracleConnection connection = new OracleConnection(connectionString))
using (OracleCommand command = new OracleCommand(sql, connection))
using (OracleDataReader reader = cmd.ExecuteReader())
{
// do something here
}
using
гарантирует, что Ваше соединение закрывается. Вы могли также передать в CommandBehavior.CloseConnection
к Вашей команде ExecuteReader
метод для закрытия его прежде Dispose
назван.
Это достаточно хорошо. использование оператора перенесет расположить оператор, поэтому даже если исключение будет выдано, Вы в безопасности, это - мой предпочтительный способ расположить ресурс.
using(OracleConnection connection = new OracleConnection(connectionString); )
{
//Create a command object
using(OracleCommand command = new OracleCommand(sql, connection))
{
using(OracleDataReader reader = cmd.ExecuteReader())
{
}
}
// whatever...
}
Я думаю использованием "использование", Вы, просит компилятор вводить попытку... наконец блок, и в наконец блоке, это закроет доступный объект для Вас.