Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Еще раз о Классах Delphi / 18 сообщений из 18, страница 1 из 1
11.01.2019, 15:30
    #39758495
Sashaua
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Всем привет, возник вопрос по классах, возможно покажется глупым и дурацким, не ругайте громко.

Допустим есть класс.
Код: pascal
1.
TUsers = class



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

Код: pascal
1.
2.
3.
4.
5.
FID:Integer;
FLogin:string;
FID_parent:Integer;
....
и т. д


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

Код: pascal
1.
2.
3.
4.
5.
 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?
...
Рейтинг: 0 / 0
11.01.2019, 15:33
    #39758498
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
SashauaВ случае если где то необходимо использовать один из методов при етом метод использует не все поля класса , как правильно поступать, использовать конструктор по умолчанию user.create() а потом сетать значения необходимым полям user.id:=1; , user.login='login'; или создавать несколько конструкторов используя Overload?
Без разницы.

Обычно делаю один супер-метод, который покрывает все необходимые поля, а потом прикручиваю к нему через overload со значениями по умолчанию, если не получается обойтись с помощью default (например, порядок/тип переменных неоднозначный).
...
Рейтинг: 0 / 0
11.01.2019, 16:01
    #39758515
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Sashaua...или...
Пофиг. Это ж не капитальное строительство высотного здания, практически все и всегда переделать можно.
...
Рейтинг: 0 / 0
12.01.2019, 02:25
    #39758670
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Открой для себя рефакторинг, почитай по нему книжки. И делай как проще. А потом по мере вырисовывания/развития/изменения архитектуры будешь рефакторить. А там видно будет, что в итоге лучше применить на конкретном этапе развития продукта...
...
Рейтинг: 0 / 0
14.01.2019, 09:58
    #39759189
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Вопрос нормальный, архитектурный.
В целом, это дело вкуса, хотя:
- больше 3-4 параметров в подпрограмме - не гут (рекомендация)
- куча перегруженных конструкторов может запутать, да и не всегда на все сочетания можно наклепать вариантов
- если поле допускает дефолтное значение, то логично сделать его свойством. С другой стороны, если значение должно присваиваться строго при создании, то либо конструктор, либо отдельный метод типа Init.
...
Рейтинг: 0 / 0
14.01.2019, 11:32
    #39759231
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Если делаешь для себя или для внутреннего ограниченного использования, то можешь делать как угодно. Потом поправите, если что. Если код на сторону или на продажу, желательно, что бы он имел стабильное API. И лучше заранее максимально хорошо продумать.
...
Рейтинг: 0 / 0
14.01.2019, 13:31
    #39759277
roschinspb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Sashaua...
В случае если где то необходимо использовать один из методов при етом метод использует не все поля класса , как правильно поступать, использовать конструктор по умолчанию user.create() а потом сетать значения необходимым полям user.id:=1; , user.login='login'; или создавать несколько конструкторов используя Overload? Да, как уже сказали тут дело вкуса.
На мой вкус лучше в Create передавать минимальный обязательный набор свойств, обычно те, которые не могут меняться.
Когда много параметров и особенно с overload легко запутаться. Возможны несчастные случаи когда в зависимости от типа входного параметра может поменяться логика работы, например Integer можно без проблем передавать в Double, но при наличии нескольких overload может поменяться вызываемый метод и смысл передаваемого значения.
Код: pascal
1.
2.
3.
4.
5.
6.
constructor Create(Id: integer); overload;
constructor Create(Price: Double); overload;
...
X := TCoolObject.Create(Query.FieldByName('Id').Value); 
// Value какого типа? Integer, Double, Variant, ... 
// Какая версия конструктора будет вызвана?
...
Рейтинг: 0 / 0
14.01.2019, 14:00
    #39759303
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
roschinspb,

Вот ещё гадать на кофейной гуще. Гораздо проще надо. А ля как ты говоришь в Create передавать минимальный обязательный набор свойств. После вызвать Init... религии не запрещают.
imho буде лучше, чем CreateById и CreateByPrice
...
Рейтинг: 0 / 0
14.01.2019, 16:38
    #39759431
roschinspb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Gatorroschinspb,

Вот ещё гадать на кофейной гуще. Гораздо проще надо... Собственно, пример на это толсто намекает
...
Рейтинг: 0 / 0
06.02.2019, 14:57
    #39770189
Sashaua
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Подскажите еще ответ на такой дурацкий вопрос, с всего прочитанного в нете несевсем для меня понятно.

Если есть метод которому на вход надо передать параметр .
get_users (id_user);

как правильно делать.

1. можна сразу в метод передавать парамерт
Код: pascal
1.
2.
3.
4.
var
TUsers:users;
 begin
users.get_users (1);



2. или
Код: pascal
1.
2.
3.
4.
5.
var
TUsers:users;
 begin
users.id_user=1 
users.get_users;


А уже в реализации метода get_users id_user брать из поля класса, значение которого я передал перед вызовом метода?
Заранее спасибо.
...
Рейтинг: 0 / 0
06.02.2019, 15:06
    #39770197
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
SashauaА уже в реализации метода get_users id_user брать из поля класса, значение которого я передал перед вызовом метода?
Зависит от...

Например, если ожидается более одного вызова, то можно и второй способ использовать.
А так особой роли не играет.
...
Рейтинг: 0 / 0
06.02.2019, 15:06
    #39770198
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
совершенно похеру.
ты сам творец.
тебе решать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.02.2019, 15:08
    #39770201
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
wadmanНапример, если ожидается более одного вызова
Имею в виду: если ожидается более одного вызова метода или методов, которым понадобится единожды установленный параметр.
...
Рейтинг: 0 / 0
06.02.2019, 15:50
    #39770243
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Параметры - это дополнительная информация для метода, которую он не знает.
Если 1 - это параметр id_user, то передавать его не нужно.
...
Рейтинг: 0 / 0
10.02.2019, 17:45
    #39771879
roschinspb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Мимопроходящийсовершенно похеру.
ты сам творец.
тебе решать.

Обычно, "творцы" которым "похеру", не приложения пишут, а выгребные ямы наполняют.

Лучше все-таки исходить из того, что проект будут сопровождать и развивать в будущем, возможно даже что не вы. Поэтому стоит с самого начала использовать стандартные подходы и наименования. Например: префиксы Get и Set прочно ассоциируются с геттерами и сеттерами. Первые возвращают значения, вторые принимают. Если наоборот, то это вызывает когнитивный диссонанс...
Я бы сделал так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
TUsers = class(...)
private
  FId: Integer;
  procedure SetId(const Value: Integer);
proteted
  procedure Change; 
public
  property Id: Integer read FId write SetId;

...
procedure TUsers.SetId(const Value: Integer);
begin
  if FId <> Value then
  begin
    FId := Value;
    Change;
  end;
end;

...

Users.Id := 1;
...
Рейтинг: 0 / 0
10.02.2019, 19:58
    #39771905
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
roschinspb,
Именно! Иначе - голимые извраты, писанные извращенцами.
...
Рейтинг: 0 / 0
11.02.2019, 14:45
    #39772274
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
10.02.2019 17:45, roschinspb пишет:
> Лучше все-таки исходить из того, что проект будут сопровождать и развивать в будущем, возможно даже что не вы.
> Поэтому стоит с самого начала использовать стандартные подходы и наименования. Например:
> префиксы Get и Set прочно ассоциируются с геттерами и сеттерами. Первые возвращают значения, вторые принимают.
> Я бы сделал так:

не чейтатетель.
но советователь.
ога.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2019, 15:32
    #39772309
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Еще раз о Классах Delphi
Мимопроходящийне чейтатетель.
но советователь.
ога.
Да ладно.
Представь, параметрх[ы] зашиты жестко, а алгоритм вычисления поменялся поменялся... Нафига класс менять?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Еще раз о Классах Delphi / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]