Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Еще раз о Классах Delphi  [new]
Sashaua
Member

Откуда: Kiev
Сообщений: 144
Всем привет, возник вопрос по классах, возможно покажется глупым и дурацким, не ругайте громко.

Допустим есть класс.
TUsers = class


есть поля класса

FID:Integer;
FLogin:string;
FID_parent:Integer;
....
и т. д

Есть проперти

 property ID:Integer read FID write setID;
 property Login:string read FLogin write setLogin;
 property ID_parent:string read FID_parent write setID_parent;
....
и т. д


Есть различные методы класса.

В случае если где то необходимо использовать один из методов при етом метод использует не все поля класса , как правильно поступать, использовать конструктор по умолчанию user.create() а потом сетать значения необходимым полям user.id:=1; , user.login='login'; или создавать несколько конструкторов используя Overload?
11 янв 19, 15:30    [21782953]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о Классах Delphi  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24711
Sashaua
В случае если где то необходимо использовать один из методов при етом метод использует не все поля класса , как правильно поступать, использовать конструктор по умолчанию user.create() а потом сетать значения необходимым полям user.id:=1; , user.login='login'; или создавать несколько конструкторов используя Overload?

Без разницы.

Обычно делаю один супер-метод, который покрывает все необходимые поля, а потом прикручиваю к нему через overload со значениями по умолчанию, если не получается обойтись с помощью default (например, порядок/тип переменных неоднозначный).
11 янв 19, 15:33    [21782960]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о Классах Delphi  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 401
Sashaua
...или...

Пофиг. Это ж не капитальное строительство высотного здания, практически все и всегда переделать можно.
11 янв 19, 16:01    [21782993]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о Классах Delphi  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1964
Открой для себя рефакторинг, почитай по нему книжки. И делай как проще. А потом по мере вырисовывания/развития/изменения архитектуры будешь рефакторить. А там видно будет, что в итоге лучше применить на конкретном этапе развития продукта...
12 янв 19, 02:25    [21783448]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о Классах Delphi  [new]
Василий 2
Member

Откуда:
Сообщений: 339
Вопрос нормальный, архитектурный.
В целом, это дело вкуса, хотя:
- больше 3-4 параметров в подпрограмме - не гут (рекомендация)
- куча перегруженных конструкторов может запутать, да и не всегда на все сочетания можно наклепать вариантов
- если поле допускает дефолтное значение, то логично сделать его свойством. С другой стороны, если значение должно присваиваться строго при создании, то либо конструктор, либо отдельный метод типа Init.
14 янв 19, 09:58    [21784500]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о Классах Delphi  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3007
Если делаешь для себя или для внутреннего ограниченного использования, то можешь делать как угодно. Потом поправите, если что. Если код на сторону или на продажу, желательно, что бы он имел стабильное API. И лучше заранее максимально хорошо продумать.
14 янв 19, 11:32    [21784570]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о Классах Delphi  [new]
roschinspb
Member

Откуда: С-Пб
Сообщений: 1561
Sashaua
...
В случае если где то необходимо использовать один из методов при етом метод использует не все поля класса , как правильно поступать, использовать конструктор по умолчанию user.create() а потом сетать значения необходимым полям user.id:=1; , user.login='login'; или создавать несколько конструкторов используя Overload?
Да, как уже сказали тут дело вкуса.
На мой вкус лучше в Create передавать минимальный обязательный набор свойств, обычно те, которые не могут меняться.
Когда много параметров и особенно с overload легко запутаться. Возможны несчастные случаи когда в зависимости от типа входного параметра может поменяться логика работы, например Integer можно без проблем передавать в Double, но при наличии нескольких overload может поменяться вызываемый метод и смысл передаваемого значения.
constructor Create(Id: integer); overload;
constructor Create(Price: Double); overload;
...
X := TCoolObject.Create(Query.FieldByName('Id').Value); 
// Value какого типа? Integer, Double, Variant, ... 
// Какая версия конструктора будет вызвана?
14 янв 19, 13:31    [21784688]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о Классах Delphi  [new]
Gator
Member

Откуда: Москва
Сообщений: 13946
roschinspb,

Вот ещё гадать на кофейной гуще. Гораздо проще надо. А ля как ты говоришь в Create передавать минимальный обязательный набор свойств. После вызвать Init... религии не запрещают.
imho буде лучше, чем CreateById и CreateByPrice
14 янв 19, 14:00    [21784725]     Ответить | Цитировать Сообщить модератору
 Re: Еще раз о Классах Delphi  [new]
roschinspb
Member

Откуда: С-Пб
Сообщений: 1561
Gator
roschinspb,

Вот ещё гадать на кофейной гуще. Гораздо проще надо...
Собственно, пример на это толсто намекает
14 янв 19, 16:38    [21784924]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить