Должен ли я использовать статические методы для общих операторов DataAccess? - PullRequest
1 голос
/ 13 июля 2009

Я не использую hibernate, и это вообще не допустимая альтернатива. Я разработал фреймворк на основе ADO.NET. Эта структура имеет операторы по умолчанию для каждого объекта базы данных.

Например, слои доступа к данным имеют следующие операторы по умолчанию:

Insert
Update
Delete
Get
GetAll

Чтобы получить доступ к этим методам, мы используем следующий пример кода:

DataAccess.Order daoOrder;

Entity.Order entityOrder;
DataAccess.Order daoOrder;

entityOrder = new Entity.Order();
entityOrder.ID = 1090;

daoOrder = new DataAccess.Order();
daoOrder.Insert(entityOrder);

Я думал об использовании статических методов, поэтому код был бы прост:

Entity.Order entityOrder;

entityOrder = new Entity.Order();
entityOrder.ID = 1090;

DataAccess.Order.Insert(entityOrder);

Предположим, что в системе 30 таблиц и 30 объектов. Нам нужно 30 объектов DataAccess, работающих как статические объекты. Эта статическая структура сэкономила бы нам несколько процессорных циклов и сэкономила бы часть памяти, поскольку ее затраты на сборщик мусора стали меньше.

Должен ли я использовать статические методы для таких общих операторов Business и DataAccess? Можете ли вы рассказать о преимуществах и недостатках этого подхода? (Я имею в виду память, производительность ...)

Ответы [ 2 ]

3 голосов
/ 13 июля 2009

Разница в производительности между двумя опциями, которые вы упомянули выше, практически не будет существовать. Я бы выбрал самый чистый и самый гибкий дизайн, которым вы можете управлять, принимая во внимание модель вашего домена и другие бизнес-требования, а затем позаботьтесь о настройке производительности, как только вы начнете работать; не пытайтесь угадать узкие места, прежде чем вы построите свою систему.

См. Этот пост Грега Бича для анализа статической производительности против производительности экземпляра ..

Его вывод:

при вызове метода два миллиарда раз вы могли бы сэкономить около 5 мс, сделав его статичным, что примерно равно нулю для каждого вызова метода

1 голос
/ 13 июля 2009

Если вы используете статические методы в этом классе, каждый объект, который будет взаимодействовать с ним, будет тесно связан с ним. На самом деле ваш код плохо проверяется. Если бы я был тобой, я бы избегал использования статических методов / классов, а также синглетонов. Если вы не хотите тестировать приложение.

...