|
![]() |
#1 |
Участник
|
Цитата:
Я все время испытывал ужасный дискомфорт, когда нарушал это правило ВР. И мне было неудобно перед теми программистами, кто знает ВР и может меня упрекнуть в нарушении этого правила. И тут... тадам. SysOperationServiceController метод new !!! Улыбаемся и машем! Если кто-то скажет, что это неправильный класс и так нельзя делать, то даже не знаю что и подумать.... ----------------- На самом деле, я бы для ВСЕХ классов, по умолчанию!, сделал в методе нью необязательный? параметр с типом Args. В большинстве случаев как раз при инициализации класса НЕОБХОДИМЫ! параметры для исключения ошибок дальнейшей инициализации и работы класса. Я не могу себе даже представить такую ситуацию, в которой необходим чистый класс, который на входе не принимает никаких параметров вообще. Возможно, я ошибаюсь. Можете привести хоть один пример класса, в котором не нужны параметры?... --------- Может быть выделить это обсуждение в отдельную тему? А то офтопик получается... Последний раз редактировалось ta_and; 07.06.2017 в 20:10. |
|
|
За это сообщение автора поблагодарили: Михаил Андреев (5), Pustik (2). |
![]() |
#2 |
Участник
|
Цитата:
Цитата:
В большинстве случаев как раз при инициализации класса НЕОБХОДИМЫ! параметры для исключения ошибок дальнейшей инициализации и работы класса.
Circle::createByCenterAndRadius(p1, r1); Circle::createByTwoPonts(p1, p2) А не new Circle(null, 0, p1, p2) Цитата:
Я не могу себе даже представить такую ситуацию, в которой необходим чистый класс, который на входе не принимает никаких параметров вообще.
Возможно, я ошибаюсь. Можете привести хоть один пример класса, в котором не нужны параметры?... |
|
![]() |
#3 |
Участник
|
Потому что анитайп слишком расплывчато. Он не типизирован и не прозрачен. Неизвестно чего он него ждать.
Аргс используется как буфер обмена повсеместно, во всей системе, формы, main, джобы...Это де-факто - параметр по умолчанию. Почему бы его не использовать и для инициализации классов? |
|
![]() |
#4 |
Участник
|
Цитата:
![]() Аргс используется не повсеместно а только в коде который вызывается непосредственно из UI. Он содержит UI специфичные параметры, а остальное фактически так же нетипизировано как AnyType |
|
![]() |
#5 |
Участник
|
Цитата:
и не говори, очень жаль, что "используется не повсеместно". |
|
![]() |
#6 |
Участник
|
То, что не заполнено, как раз не проблема.
Это дело уже инициализируемого объекта - проверить входные данные. Главное что для них есть место. Всем известное место. Повсеместно используемое место. и если бы это место еще использовалось бы при инициализации любого экземпляра, то это было бы замечательно. Ну хотя бы с дефолтным нуллом. Наподобие мэйн. На крайняк всегда можно перекрыть метод new и добавить - изменить входные параметры... |
|
![]() |
#7 |
Участник
|
Это все равно, что AnyType - потому, что никто никогда не будет знать что туда положить чтобы код корректно работал либо придется приводить описание используемых параметров в документации к классу, только оно не будет проверяться компилятором и возникать в подсказках
![]() Почитайте про design by contract и вообще про принципы проектирования |
|
![]() |
#8 |
Участник
|
Нет. не все равно.
На моем опыте 90% классов на вход принимают енум и курсор. Эти 90% классов вполне покрываются передачей на вход аргс. Можно считать, что это типизированная передача фиксированных параметров в контракте. Возможно, для некоторых классов избыточная. Но зато (если бы это было так) унифицированная для всех объектов системы! А это приводит в порядок мысли в голове разработчиков новой функциональности, и конкретным ожиданиям для существующей. И на 90%!!! исключает зоопарк в передаваемых структурах данных при инициализации. Энитайп же ни о чем не говорит. Совершенно. Он не типизирован. Поэтому использование его в контракте не является правильным решением. Проверка переданных данных лежит полюбому на создаваемом классе. --------- Вы же не будете утверждать, что использование контракта избавляет от необходимости проверки входных данных? |
|
|
За это сообщение автора поблагодарили: mazzy (2), ax_mct (5). |
![]() |
#9 |
Banned
|
Вот лучше бы те кто такое читают в Аксапту бы не лезли. Ей от этого дурно, а сейчас вообще подыхает
![]() Всякие банды четырех решали конкретные проблемы, а не мифические. Я даже не знаю что хуже -индусские реализации плоской земли или когда при изготовлении табуретки используются все знания про многомерность Солнечной системы. Те же эти атрибуты чтобы пометить классы при вызове извне - типичный пример overengineering. Круто, красиво, талантливо. Но до тех пор пока это не упрощает решение уже существующих проблем - это ненужная хрень. Я например не вижу как это что-то упрощает или экономит в контексте даже AX7. Не нужно загодя решать потенциальные проблемы. Это overengineering. |
|
Теги |
sysextension framework, sysoperation framework, как правильно, полезное |
|
|