|
|
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЛагман, А зачем столько новых бестолковых Comparator для типов, которы уже реализуют Comparable? У вас проблемы с восприятием примеров, и с ООП. maytonЛагман, y нас есть необходимость сортировать также null значения. У вас проблемы с восприятием примеров. Алсо своим воторым вопросом вы отвечаете на свой первый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 18:36 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
а, думал это один человек, сорри. В общем итого mayton отвечает на вопрос Blazkowicza ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 18:37 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
ЛагманУ вас проблемы с восприятием примеров, и с ООП. У вас проблемы с кодированим и культурой общения. Меня каждый раз умиляет как джуниоры из года в год ваяют подобные страницы кода, которые не делают ничего полезного и заменяются парой методов и классом. ЛагманmaytonЛагман, y нас есть необходимость сортировать также null значения. У вас проблемы с восприятием примеров. Алсо своим воторым вопросом вы отвечаете на свой первый. Мой рефакторинг первоначального кода точно так же справляется с null значениями, как и оригинальный код. Без копараторов. А вот подобный код в проекте Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. это бесполезный шум. Не нужен компаратор, так где есть Comparable. Не нужно два разных компаратора для двух Comparable типов. Такой код не несет никакой пользы. Просто усложяет код, не более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 18:43 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
Blazkowiczswitch..case... +1000 mayton, Вот еще одно оригинальное решение: http://stackoverflow.com/a/1421537 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 19:03 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDmayton, А так ли нужен вам List<FuckenEntity> ? Не подойдет ли List<List<Comparable>>, т.е. матрица свойств обектов, вместо списка обектов. Ну и можно класс отдельный создать Matrix<T extends Comparable>, который будет еще и описания колонок внутри себя хранить. Мой вопрос слишком сложен для местной массы? Настолько сложен, что даже непонятно о чем это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 21:28 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDМой вопрос слишком сложен для местной массы? Конечно. Мы тут тупая масса идиотов. Куда нам до Вас. HoBTIDНастолько сложен, что даже непонятно о чем это? Тихо сам с собою я ведь беседу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 22:12 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDHoBTIDmayton, А так ли нужен вам List<FuckenEntity> ? Не подойдет ли List<List<Comparable>>, т.е. матрица свойств обектов, вместо списка обектов. Ну и можно класс отдельный создать Matrix<T extends Comparable>, который будет еще и описания колонок внутри себя хранить. Мой вопрос слишком сложен для местной массы? Настолько сложен, что даже непонятно о чем это? http://lurkmore.to/Неуловимый_Джо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 01:18 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDHoBTIDmayton, А так ли нужен вам List<FuckenEntity> ? Не подойдет ли List<List<Comparable>>, т.е. матрица свойств обектов, вместо списка обектов. Ну и можно класс отдельный создать Matrix<T extends Comparable>, который будет еще и описания колонок внутри себя хранить. Мой вопрос слишком сложен для местной массы? Настолько сложен, что даже непонятно о чем это? Он не сложен. Он - не нужен. У нас сопряжение GWT виджетов с слоем процессоров идёт через списки Entities. Это в некотором роде мета-описание самих сущностей. И оно несёт материальный смысл. Как метаинформация о колонках в БД. Мы можем абстрагироваться от колонок но мета-описание придётся сделать на другом Layer. А это дополнительные расходы. Зачем описывать сущности еще раз в другом месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 02:41 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonУ нас сопряжение GWT виджетов с слоем процессоров идёт через списки Entities.Т.е. сопряжение нельзя сделать с матрицей вместо списка? maytonЭто в некотором роде мета-описание самих сущностей. И оно несёт материальный смысл. Как метаинформация о колонках в БД.Это имеет какой-то смысл, только если у ваших сущностей есть поведение, которое необходимо реализовать именно в этом сортируемом списке, а не где-то еще. Если там просто геттеры и сеттеры, все можно сделать через матрицу. Если, например пользователь выбирает из списка объект и с ним делает что-то сложное, то сам объект можно создавать только когда пользователь начал с ним что-то делать. mayton... Мы можем абстрагироваться от колонок но мета-описание придётся сделать на другом Layer. А это дополнительные расходы. ... Зачем описывать сущности еще раз в другом месте.Вполне логично задать симметричный вопрос, зачем описывать сущности в этом месте? Ведь по сути, сущности здесь не нужны, нужна просто таблица с их свойствами. А эта таблица - другая, совершенно отдельная сущность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 10:26 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
Эта Entity(DTO) описывается на уровне бизнеса. Поле такое-то... тип такой-то.. DSL в некотором роде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 11:21 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
maytonЭта Entity(DTO) описывается на уровне бизнеса. Поле такое-то... тип такой-то.. DSL в некотором роде. Как связан "уровень бизнеса" и таблица со строками и числами на экране пользователя? Вы Excel пользовались когда-нибудь? Вот Экселю совершенно наплевать на любые уровни бизнеса, данные - это просто таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 11:45 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
Если же вам потом понадобится нечто "очень бизнесовое", добавьте в эту табличку колонку с id, по которому потом можно создать сущность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 11:46 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDЕсли же вам потом понадобится нечто "очень бизнесовое", добавьте в эту табличку колонку с id, по которому потом можно создать сущность. В чем преимущества? Вы предлагаете решение без очевидных достоинств и требуете доказательств что оно не самое оптимальное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 11:49 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВ чем преимущества? Вы предлагаете решение без очевидных достоинств и требуете доказательств что оно не самое оптимальное? Преимущества в простой сортировке и фильтрации такой таблицы, без рефлексии. Функции работы с ней универсальны, все что им нужно, это чтобы значения в одной колонке были сравнимы между собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 12:02 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDПреимущества в простой сортировке и фильтрации такой таблицы, без рефлексии. Моя версия решения проблемы не использует рефлексию. Задача сортировка списка списков по элементу внутреннего списка слабо отличается от задачи сортировки списка бинов по свойству. HoBTIDФункции работы с ней универсальны, все что им нужно, это чтобы значения в одной колонке были сравнимы между собой. Забудьте слово "универсальный". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 12:09 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczМоя версия решения проблемы не использует рефлексию. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Вот эта версия??? Осознаете ли Вы значение слова "говнокод"??? BlazkowiczЗадача сортировка списка списков по элементу внутреннего списка слабо отличается от задачи сортировки списка бинов по свойству.Даже если предположить, что слабо отличается (не хочу сейчас углубляться в случаи, когда она отличается очень сильно), как ее реализовать? В случае бинов - только рефлексией или же забитыми гвоздями switch или if. BlazkowiczЗабудьте слово "универсальный". Мне жаль, что вы его забыли, уж я-то не забуду никогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 12:24 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDОсознаете ли Вы значение слова "говнокод"??? Многоуважаемое хамло. На данный момент это наиболее простой и компактный код приведенный в этой теме и соответствующий семантике оригинального метода. Вашего кода мы пока в теме не увидели. HoBTIDДаже если предположить, что слабо отличается (не хочу сейчас углубляться в случаи, когда она отличается очень сильно), как ее реализовать? Правильно, углублятся не нужно. Пукнул в лужу и пошел. Код привести не можем. Обосновать его преимущество не можем. Хамить - всегда пожалуйста. HoBTIDВ случае бинов - только рефлексией или же забитыми гвоздями switch или if. Ну, у вас, вероятно, если более разумные и "универсальные" идеи как привязать свойства к индексам полей. Только вы нам их не расскажите, как я понял. HoBTIDМне жаль, что вы его забыли, уж я-то не забуду никогда. Слово "универсальный" это то как джуниоры описывают свой код. Они понятия не имееют о таких критериях, как связанность, сцепление, читаемость, ошибкоустойчивость к будущим изменениям и т.п. У них на всё один критерей "универсальный". Я из этого возраста давно вышел, поэтому данным словом код никогда не измеряю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 12:33 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczКод привести не можем. Обосновать его преимущество не можем. Кода будет довольно много, я его писал в одном из проектов. Зато он не зависит от сущности, это я называю словом "универсальный". Если у вас недопонимание этого слова в связи с психическими травмами получеными в джуниорском периоде, это не значит, что и у других похожие травмы. BlazkowiczНу, у вас, вероятно, если более разумные и "универсальные" идеи как привязать свойства к индексам полей. Только вы нам их не расскажите, как я понял. Ну что ж, пожалуй напишу азы, вдруг кто-нибудь поймет? Код: java 1. 2. 3. 4. Осталось написать класс ColumnDef - описание колонки, и различные методы класса VisualTableModel, вот тут кода будет много, но за соответствующее вознаграждение, я готов его предоставить. Blazkowicz ... о таких критериях, как связанность, сцепление, читаемость, ошибкоустойчивость к будущим изменениям и т.п. У них на всё один критерей "универсальный". Я из этого возраста давно вышел, поэтому данным словом код никогда не измеряю. И Ваш код удовлетворяет критерию слабой связности, например? Или, может быть, он ошибкоустойчивый к будущим изменениям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 12:55 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDКода будет довольно много, я его писал в одном из проектов. Ну, вот и я о том же. HoBTIDЗато он не зависит от сущности, это я называю словом "универсальный". Ну, так бины тогда можно вообще выкинуть и писать всё на массивах и хэшмапах. На форумах каждые два года появляется нуб с такой "оригинальной" и "универсальной" идеей. HoBTIDЕсли у вас недопонимание этого слова в связи с психическими травмами получеными в джуниорском периоде, это не значит, что и у других похожие травмы. Да, всё понятно уже. Можешь дальше не закатывать истерику. HoBTIDНу что ж, пожалуй напишу азы, вдруг кто-нибудь поймет? Код: java 1. 2. 3. 4. Круто ваще. Как я сразу об этом не подумал. Спасибо, сансэй. HoBTIDОсталось написать класс ColumnDef - описание колонки, и различные методы класса VisualTableModel, вот тут кода будет много, Какая мелочь. HoBTIDно за соответствующее вознаграждение, я готов его предоставить. Куда переводить? HoBTIDИ Ваш код удовлетворяет критерию слабой связности, например? Или, может быть, он ошибкоустойчивый к будущим изменениям? Это здесь при чем? Это же не я заявляю об "универсальности". Мой код лаконичный - пока что не вижу чтобы кто-то более простое решение предложил. Полностью сохраняет семантику оригинального метода. Полностью сохраняет изначальный дизайн, класс, который отвечал за маппинг индекса на свойства, всё так же за это и отвечает. Это не значит что я с первоначальным дизайном согласен. Поэтому и порекомендовал унести маппинг индекса на свойства в саму сущность. Вы же предлагаете автору решение, - которое потребует перелопатить вагон существующего кода в том числе за пределами указаных методов. - решение, которое не факт что натянется на существующие view - решение, которое обладает непостижимо максимальной "универсальностью" У меня на проекте имеется ArrayBeanTableModel, универсальный для всех сущностей. Без всяких матриц. Никак от детипизации я не страдаю. Ваше же решение сродни динамической типизации. Никакой возможности контролировать что там в матрице и как-то этим пользоваться. Единственное что можно делать, это выводить на View. Какая-от сомнительная универсальность выходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 13:08 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczУ меня на проекте имеется ArrayBeanTableModel, универсальный для всех сущностей. Без всяких матриц. Т.е. у себя вы используете решение, не зависящее от типа сущности, а автору темы предлагаете зависящее. Оригинально. И на каком же принципе оно основано? Дайте угадаю, рефлексия? BlazkowiczНикак от детипизации я не страдаю. Ваше же решение сродни динамической типизации. Никакой возможности контролировать что там в матрице и как-то этим пользоваться. Единственное что можно делать, это выводить на View. Какая-от сомнительная универсальность выходит. Действительно, контролировать ничего не нужно, т.к. данные через эту матрицу не редактируются, только выводятся для просмотра. Редактирование строчки нужно делать уже через сущность в отдельной форме. Преимущество в том, что матрица реализует все требования к списку для просмотра (сортировка, фильтрация, может быть реализовано постраничная загрузка) и этим не нужно заморачиваться в сущностях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 13:30 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDТ.е. у себя вы используете решение, не зависящее от типа сущности, а автору темы предлагаете зависящее. Оригинально. Автору я предлагаю решение проблемы о которой он спросил. А не переписать половину проекта под "универсальное" решение. HoBTIDИ на каком же принципе оно основано? Дайте угадаю, рефлексия? С фига ли? Мапятся колонки на свойства схожим образом через switch case. У меня гриды на View слишком динамично меняются и довольно сильно отличаются от модели. Поэтому существует отдельный слой маппинга модели на гриды. Зато через него всегда доступна строго типизированя модель, через которую я всегда могу запускать бизнес-логику, конкретного типа. В вашем же решении, отдельно матрица только для просмотра, отдельно список сущностей где-то ещё, либо списка вообще нет, и сущности каждый раз пересобираеются из матрицы без какого либо контроля типов. Действительно что может быть проще и универсальнее массива массивов. HoBTIDДействительно, контролировать ничего не нужно, т.к. данные через эту матрицу не редактируются, только выводятся для просмотра. Редактирование строчки нужно делать уже через сущность в отдельной форме. Оу, но теперь понятно всё. Т.е. данные можно только редактировать и показывать. Теперь мы пришли к тому что матрица сразу делает грид не доступным для радактирования, а лишь только через отдельную форму. Очень "универсально". HoBTIDПреимущество в том, что матрица реализует все требования к списку для просмотра (сортировка, фильтрация, может быть реализовано постраничная загрузка) и этим не нужно заморачиваться в сущностях. У меня есть сортировка, и постраничная загрузка. Фильтрация унесена на уровнеь работы с базой. Локально фильтровать сущности, как-то странно и не эффективно. И всё это на типизировном списке сущностей, без матрицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 13:40 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczС фига ли? Мапятся колонки на свойства схожим образом через switch case. Поэтому существует отдельный слой маппинга модели на гриды. switch case независимо от типа сущности? Я поражен. Или же для каждой сущности есть отдельный объект маппинга, куда спрятан этот switch, и это Вы называете "независимо"? BlazkowiczЗато через него всегда доступна строго типизированя модель, через которую я всегда могу запускать бизнес-логику, конкретного типа. В вашем же решении, отдельно матрица только для просмотра, отдельно список сущностей где-то ещё, либо списка вообще нет, и сущности каждый раз пересобираеются из матрицы без какого либо контроля типов. Действительно что может быть проще и универсальнее массива массивов. Действительно, у моего решения есть недостаток, если нужна бизнес логика непосредственно в списке, его использовать нельзя. Но чаще всего, такая логика не нужна. Отдельного списка сущностей нет, сущность загружается из БД или берется из кэша, при начале редактирования. Из матрицы пересобирать не совсем корректно, т.к. она может не содержать всех колонок, и уж точно не содержит табличных частей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 14:07 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
HoBTIDswitch case независимо от типа сущности? Я поражен. Или же для каждой сущности есть отдельный объект маппинга, куда спрятан этот switch, и это Вы называете "независимо"? Прикинь, да. Модель на View надо как-то маппить. Эка неожиданность для гуру дизайна. Правда? В вашем решении возможны два варианта. Либо вы в матрицу вываливаете всё что только можно. Каким образом, например, гарантировать порядок колонок? Либо у вас присутствует точно такой же маппинг, но в неявном виде. Что затрудняет его поддержку. HoBTIDДействительно, у моего решения есть недостаток, если нужна бизнес логика непосредственно в списке, его использовать нельзя. Но чаще всего, такая логика не нужна. Добро пожалуйвать в чудесный мир Anemic Domain Model. HoBTIDОтдельного списка сущностей нет, сущность загружается из БД или берется из кэша, при начале редактирования. Мы уже поняли, что у вас кроме просмотра редактирования, другой логики быть не может. Можно не продолжать. HoBTIDИз матрицы пересобирать не совсем корректно, т.к. она может не содержать всех колонок, и уж точно не содержит табличных частей. Ну, понятно. Все прелести Anemic Domain Model. Если нужна логика для конктретного типа, она будет реализована прям там в таблице с матрицей этого типа. Это очень удобно, не нужно вообще париться о разделении модели и представлении. До тех пор пока одна и та же логика вдруг не потребуется на нескольких разных слоях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 14:14 |
|
||
|
Пятничный Best practices.
|
|||
|---|---|---|---|
|
#18+
Тут цена вопроса - "сферический проект в вакууме" или уже имеющийся проект который писали в определённом ключе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 14:18 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38555174&tid=2122562]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 358ms |

| 0 / 0 |
