Когда я оборачиваю некоторый процедурный код в классе (в моем случае c ++, но это, вероятно, здесь не представляет интереса), я часто путаюсь с лучшим способом сделать это. С процедурным кодом я имею в виду то, что вы могли бы легко вставить в процедуру и где вы используете окружающий объект в основном для ясности и простоты использования (обработка ошибок, ведение журнала, обработка транзакций ...).
Например, я хочу написать некоторый код, который считывает данные из базы данных, выполняет некоторые вычисления и вносит некоторые изменения в базу данных. Для того, чтобы сделать это, ему нужны данные от звонящего.
Как эти данные попадают в объект best . Давайте предположим, что ему нужно 7 значений и список целых чисел.
Мои идеи:
- Список параметров конструктора
- Установить функции
- Список параметров центральной функции
Преимущество первого решения заключается в том, что вызывающая сторона должна предоставить именно то, что нужно классу для выполнения работы, а также обеспечивает доступность данных сразу после создания класса. Затем объект может быть сохранен где-нибудь, и центральная функция может быть вызвана вызывающим абонентом, когда он захочет, без какого-либо дальнейшего взаимодействия с объектом.
Это почти то же самое во втором примере, но теперь центральная функция должна проверить, все ли необходимые данные были доставлены вызывающей стороной. И вопрос в том, есть ли у вас одна функция набора для каждого блока данных или только одна.
Последнее решение имеет только то преимущество, что данные не должны храниться перед выполнением. Но тогда это выглядит как обычный вызов функции, и преимущества подхода исчезают.
Как ты делаешь что-то подобное? Правильны ли мои соображения? Мне не хватает некоторых достоинств / недостатков?
Этот материал настолько прост, но я не смог найти на нем никаких ресурсов.
Редактировать: Я не говорю о подключении к базе данных. Я имею в виду все данные, необходимые для завершения процедуры. Например, все данные бухгалтерской операции.
Давайте сделаем опрос, что вам больше нравится:
class WriteAdress {
WriteAdress(string name, string street, string city);
void Execute();
}
или
class WriteAdress {
void Execute(string name, string street, string city);
}
или
class WriteAdress {
void SetName(string Name);
void SetStreet(string Street);
void SetCity(string City);
void Execute();
}
или
class WriteAdress {
void SetData(string name, string street, string city);
void Execute();
}