что больше ООП: java или .net? [re: посоветуйте самоучитель...]

6yrop

давно хотел завести тему типа "Java все таки начала сливать C#-у", но как то не решался :)

Serab

С приходом какого .NET'а?
иМхо, 2й уже круче, хотя у меня на java опыта вообще нет, лежала книженция в толчке некоторое время, листал.

digenet

"Java все таки начала сливать C#-у"
--------------------------------------------------
в чём, в каких задачах ?

kokoc88

давно хотел завести тему типа "Java все таки начала сливать C#-у", но как то не решался
Может быть, она начнёт сливать, когда господа из Microsoft перестанут делать классы а-ля ReadOnlyCollection, у которых только один конструктор, принимающий IList.

6yrop

С приходом какого .NET'а?
во времена .NET 1.1 и 4-й джавы был некоторый паритет (я на обоих платформах поработал)
.NET 2.0 слегка превосходил за счет более правельных дженериков
с приходом .NET 3.5/4.0 уже видно явное отставание Джавы

agaaaa

Ну конкретно этот экземпляр они перестали делать после .NET 2.0
Хотя, имхо, проблема несущественная.

kokoc88

с приходом .NET 3.5/4.0 уже видно явное отставание Джавы
Ты бы хоть сказал, в чём она начала отставать? Вот, например, SWING лучше WPF в несколько раз...

kokoc88

Хотя, имхо, проблема несущественная.
Отсутствие нормальных коллекций - проблема вполне существенная для хоть сколько-нибудь серьёзной платформы.

agaaaa

Вот, например, SWING лучше WPF в несколько раз
Во сколько?

agaaaa

Отсутствие нормальных коллекций - проблема вполне существенная для хоть сколько-нибудь серьёзной платформы.
Какая тебе нужна коллекция?

kokoc88

Во сколько?
Как минимум в два: SWING объектно-ориентированный и не тормозит при отрисовке текста.

kokoc88

Какая тебе нужна коллекция?
Любая из стандартных. Плюс readonly и thread safe nonblocking версии этих коллекций. А также нормальная ООП архитектура.

6yrop

 
Вот, например, SWING лучше WPF в несколько раз...

круче, только он так и не взлетел :grin: . На свинге так никто серьезно и не пишет.
А у WPF еще есть шанс, вот последняя студия на WPF-е.

6yrop

Ты бы хоть сказал, в чём она начала отставать?
вывод типа

kokoc88

вывод типа
Вывод, взятый откуда? Тут много людей, которые делали коммерческий софт на обоих языках?

6yrop

А также нормальная ООП архитектура.
и слабо богу, что этой болезнью разработчики C#-а не страдают

6yrop

вывод типа

Вывод, взятый откуда?
ой :), я имел ввиду type inference

kokoc88

круче, только он так и не взлетел . На свинге так никто серьезно и не пишет.
Откуда информация? Я на работе использую две коммерческие программы, сделанные на свинге.
А у WPF еще есть шанс, вот последняя студия на WPF-е.
Рано говорить, что есть какой-то шанс только из-за того, что студия на WPF-е. До тех пор, пока микрософты не исправят кучу багов, сделать что-то серьёзное на WPF будет очень сложно. Кроме того, даже после исправления багов нам придётся продолжать эмулировать банальные MVC/MVP.

kokoc88

А также нормальная ООП архитектура.
и слабо богу, что этой болезнью разработчики C#-а не страдают
Слова истинного дельфиста... Тогда понятно, откуда берутся классы с сотнями public методов и свойств, и прочая херня, которая делает платформу .NET полным гавном с точки зрения качественной разработки кода.

kokoc88

ой , я имел ввиду type inference
А мы сравниваем только языки, или платформы?

Dasar

А также нормальная ООП архитектура.
это (нормальная ООП-архитектура) невозможно на языках уровня java/c#

6yrop

Откуда информация? Я на работе использую две коммерческие программы, сделанные на свинге.
это чисто мое ощущение, сформированное тем, что я видел. Все свинговое, что я видел, тупо тормозит при кликах мышки.

kokoc88

это (нормальная ООП-архитектура) невозможно на языках уровня java/c#
Я не столь критичен. Поэтому считаю, что возможна.

kokoc88

Все свинговое, что я видел, тупо тормозит при кликах мышки.
Значит, последний раз SWING приложение ты видел году в 2003 или 2004. Сейчас он работает как быстрее Windows Forms, так и быстрее WPF.

6yrop

Тогда понятно, откуда берутся классы с сотнями public методов и свойств, и прочая херня, которая делает платформу .NET полным гавном с точки зрения качественной разработки кода.
ну во-первых, если меряться количеством говна, то джава тоже не уступит, особенно, если учесть, что джава позиционируется как платформа, на которой можно использовать либы от разных поставщиков.

Dasar

Я не столь критичен. Поэтому считаю, что возможна.
тогда стоит определиться, что такое ООП.
если под ООП понимать, что язык умеет оперировать простыми объектами, то да - на java/c# возможно ооп
если же под ООП понимать, что язык в том числе оперировать и сложными объектами, то нет - на java/c# ооп невозможен.
ps
простые объекты - это объекты, которые не содержат ссылок на другие объекты
сложные объекты - это объекты, которые содержат ссылки на другие объекты

6yrop

ps
простые объекты - это объекты, которые не содержат ссылок на другие объекты
сложные объекты - это объекты, которые содержат ссылки на другие объекты
а чем помешали ссылки, если ограничиться объектами в памяти?

kokoc88

тогда стоит определиться, что такое ООП.
ООП - это способ программирования. (Не вижу смысла углубляться в философские споры, которые на практике ничего не стоят.) В платформе Java присутствует. В платформе .NET отсутствует.

Dasar

а чем помешали ссылки, если ограничиться объектами в памяти?
тем что задача вида: хочу форум(считаем, что у имеющегося форума какая-то ооп-модель есть) такой же, но чтобы у каждого сообщения был свой цвет - в целом не решается.
а задача-то для ООП базовая - наследование в чистом виде одного объекта от другого.

Dasar

В платформе Java присутствует. В платформе .NET отсутствует.
в .net ооп есть и достаточно хороший, но "плоский" (для простых объектов)

kokoc88

в .net ооп есть и достаточно хороший, но "плоский" (для простых объектов)
В каком месте он хороший? В Windows Forms, которые автоматически предлагают решения вида MainClass? Или в WPF, где недалеко от этого ушли? Или в откровенно плохом наборе коллекций? Или в низкоуровневой многопоточной библиотеке, когда все классы являются чуть ли не прямыми аналогами WIN32? Или в XML сериализаторе, который тупо использует всё, что public, и не разруливает IComparable?

6yrop

а задача-то для ООП базовая - наследование в чистом виде одного объекта от другого.
я на это и намекал, пусть ООП там само по себе (со своими задачами в чистую или в грязную борется а язык сам по себе. C# вбирает помаленьку удобные инструменты и это хорошо. А то что наследование по ООП и наследование, как инструмент языка C#, это совсем разные вещи никого не волнует :) .
 
у каждого сообщения был свой цвет - в целом не решается.

При нормальном C# коде и при возможности изменять сорци и первого и второго формумов это и сейчас делается не сложно. Т.е. инструменты уже сейчас есть, и проблемы нет.

6yrop

предлагают решения вида MainClass?
это что такое?

kokoc88

это что такое?
Так я называю весь код в одном классе. Это ещё во времена C++/MFC было, только называлось CMainClass.

6yrop

В Windows Forms, которые автоматически предлагают решения вида MainClass?

что значит предлагает? кто мешает писать не все в одном?

6yrop

Или в низкоуровневой многопоточной библиотеке, когда все классы являются чуть ли не прямыми аналогами WIN32?
по моему не очень глубокому сравнению, текущая версия многопоточности дотнета сильно похожа на джавскую.

Dasar

В Windows Forms, которые автоматически предлагают решения вида MainClass? Или в WPF, где недалеко от этого ушли?
ТО, что ты хочешь - это уже не "плоский" ооп
Или в откровенно плохом наборе коллекций?
если брать linq, то все нужные коллекции есть.
Или в низкоуровневой многопоточной библиотеке, когда все классы являются чуть ли не прямыми аналогами WIN32?
в четвером .net появился plinq, который достаточно хорош.
Или в XML сериализаторе, который тупо использует всё, что public, и не разруливает IComparable?
это уже тоже получается не плоский ооп.
в парадигме "плоского" ооп для этого используется xlinq

kokoc88

что значит предлагает? кто мешает писать не все в одном?
Никто не мешает тебе накрутить сверху какую-то эмуляцию MVC/MVP/... Но сами Windows Forms - это чистый MainClass, и все визарды и прочие приблуды в студии работают исключительно в этих рамках.

kokoc88

ТО, что ты хочешь - это уже не "плоский" ооп
Я не знаю, насколько MVC плоский, но в SWING и spring он как бы есть.
если брать linq, то все нужные коллекции есть.
Видимо, нам нужны разные коллекции. Но мне кроме нужных коллекций нужны ещё и такие, чтобы позволяли нормально писать ООП код.
в четвером .net появился plinq, который достаточно хорош.
А аналога java.util.concurrent там не будет? :)
это уже тоже получается не плоский ооп.
Какая разница плоский или нет? В Java все перечисленные вещи сделаны с использованием ООП.

6yrop

Никто не мешает тебе накрутить сверху какую-то эмуляцию MVC/MVP/... Но сами Windows Forms - это чистый MainClass, и все визарды и прочие приблуды в студии работают исключительно в этих рамках.
в принципе, я тебя понимаю и в некотором смысле соглашусь, но есть несколько замечаний.
 
Никто не мешает тебе накрутить сверху какую-то эмуляцию MVC/MVP/...

А почему мне UI-я библиотека должна навязывать какой-нибудь MVC/MVP? Ее дело предоставить гибкий механизм отрисовки на экране и обработку клавиатуры, кликов мышки и т.д. А с остальным мы отдельно разберемся и выберем, что нам удобнее.

kokoc88

А почему мне UI-я библиотека должна навязывать какой-нибудь MVC/MVP? Ее дело предоставить гибкий механизм отрисовки на экране и обработку клавиатуры, кликов мышки и т.д. А с остальным мы уж сами разберемся и выберем, что нам удобнее.
Потому что GUI библиотека - это не библиотека отрисовки графики и не библиотека обработки событий от устройств ввода-вывода.

6yrop

Потому что GUI библиотека - это не библиотека отрисовки графики и не библиотека обработки событий от устройств ввода-вывода.
т.е. в Википедии стоит исправить?
The Windows Presentation Foundation (or WPF) is a graphical subsystem for rendering user interfaces in Windows-based applications.
http://en.wikipedia.org/wiki/Windows_Presentation_Foundation

kokoc88

т.е. в Википедии стоит исправить?
Возможно, стоит. Если учесть, что сами микрософты позиционируют WPF далеко не как обычный рендерер, а скорее как платформу для создания GUI приложений. Кроме того там есть такие вещи, как Button или TextBox, причём не только в виде отрисовки.

6yrop

Если учесть, что сами микрософты позиционируют WPF далеко не как обычный рендерер, а скорее как платформу для создания GUI приложений.
под "позиционирует" ты имеешь ввиду рекламные проспекты? Ну что ж, правильно поступает — надо как можно больше привлечь леммингов, чтобы возились и продвигали ее технологию. А в реальности надо просто смотреть что сделано хорошо/удачно, и этим пользоваться :) . А паттерны MVC/MVP настолько общо формулируются, что фактически являются ничем :grin: . В тоже время, более менее опытный прогер всегда сам найдет правильное разбиение по классам.

6yrop

В тоже время, более менее опытный прогер всегда сам найдет правильное разбиение по классам.
а тут уже важную роль играют доступные средства языка: type inference, expression tree, лямбда выражения, ко/контрвариантные дженерики, экстеншен методы, XAML и т.д.

kokoc88

А паттерны MVC/MVP настолько общо формулируются, что фактически являются ничем
Формулируются и применяются они вполне конкретно. Но если всё время использовать WF/WPF, то паттерны могут остаться чем-то общим и загадочным.
а тут уже важную роль играют доступные средства языка: type inference, expression tree, лямбда выражения, ко/контрвариантные дженерики, экстеншен методы, XAML и т.д.
Я совсем не понимаю, как всё вышеперечисленное помогает "найти правильное разбиение по классам". В этом книжка GoF помогает, а не лямбда выражения.

Dasar

Я совсем не понимаю, как всё вышеперечисленное помогает "найти правильное разбиение по классам". В этом книжка GoF помогает, а не лямбда выражения.
эти инструменты помогают это "правильное разбиение" реализовать и связать между собой

Gaishnik

В этом книжка GoF помогает, а не лямбда выражения.
Давайте похоливорим на тему ГоФ. Я начну. Гоф - тупизна.
update:
Набрал в гугле design patterns hype и нашел такой текст:
Why do the design patterns people come up with such ridiculously elaborate conceptualisations of perfectly trivial ideas?
...
I read and reread the definition, examined the flimsy code snippets carefully, stared at the nearly tautologic diagrams for roughly 10 minutes, trying to grasp the deeply profound idea but failing. It finally dawned on me, after investing much effort, that it was right there – only banal enough that it was obscured by the heaps of pontification. It turns out the concept is so trite I’ve used it more times than I can remember, without ever having thought of it as any kind of dinstinct idea. What the heck?
...
That explains the feeling of missing something vague. All the critical examination and lengthy discussion suggested profundity that simply does not exist. The impressive-sounding term is nothing but a thin cloud of vapour.
Эрик Гамма пишет
Patterns enable you to repeat a successful design done by someone else
Какой-нибудь bridge или singleton это, оказывается, design, причем не какой-то вшивый design, а successful.
Возможно, какие-то упоротые индусы когда-то писали в таком стиле

Product p;
switch(...){
case ...:
p = Factory.getConcreteProductA;
case ...:
p = Factory.getConcreteProductB;
}

А потом прискакал Гамма на белом коне и даровал индусам AbstractFactory, и они в знак благодарности поминают его на каждом собеседовании, задавая джуниорам тупые вопросы типа:"Назови как можно больше паттернов из 23" (этот вопрос задавали однажды мне, лол).
И напоследок
One comment I saw in a news group just after patterns started to become more popular was someone claiming that in a particular program they tried to use all 23 GoF patterns. They said they had failed, because they were only able to use 20. They hoped the client would call them again to come back again so maybe they could squeeze in the other 3.

6yrop

Я совсем не понимаю, как всё вышеперечисленное помогает "найти правильное разбиение по классам". В этом книжка GoF помогает, а не лямбда выражения.
уже правильно ответил. "по классам" следует убрать или воспринимать в обобщенном смысле "по элементам атомарности, предоставляемых языком".

kokoc88

уже правильно ответил. "по классам" следует убрать или воспринимать в обобщенном смысле "по элементам атомарности, предоставляемых языком".
Как наличие "элементов атомарности, предоставляемых языком" помогает правильно разбить код (на эти же элементы)? Точно так же можно было бы сказать, что наличие пианино помогает написать более хорошую музыку для пианино.

6yrop

Формулируются и применяются они вполне конкретно.
Применяются конкретно, да. А ярлычок MVC клеят к чему угодно. Например, для WEB-а и для Swing-а MVC это сильно разные вещи, об этом даже в википедии пишут
Java Swing is different from the other frameworks in that it supports two MVC patterns:
http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93cont...

6yrop

Точно так же можно было бы сказать, что наличие пианино помогает написать более хорошую музыку для пианино.
я не совсем понял, выше сравнивались два языка, второй язык включает возможности первого плюс еще какие-то. Т.е. сравнивать надо, скажем, двухрядную гармонь и трехрядный баян :grin: .

kokoc88

Применяются конкретно, да. А ярлычок MVC клеят к чему угодно. Например, для WEB-а и для Swing-а MVC это сильно разные вещи, об этом даже в википедии пишут
MVC для WEB-а (для какого WEB-а?) и Swing - вещи вовсе не разные. Даже Document-View можно считать MVC. А MVP вообще несколько разных подтипов, но от этого он не перестаёт быть MVP.
Что касается википедии, то на тему Swing-а там написан ряд неточностей.

kokoc88

.е. сравнивать надо, скажем, двухрядную гармонь и трехрядный баян.
А исполнить на них надо органную мессу...

Dasar

Как наличие "элементов атомарности, предоставляемых языком" помогает правильно разбить код (на эти же элементы)?
напрямую.
можно, например, на С долго говорить про какие-то объекты, классы, полиморфизм, но все это останется пустым звуком, т.к. все это на С реализуется долго и трудно.
Точно так же можно было бы сказать, что наличие пианино помогает написать более хорошую музыку для пианино.
конечно.
во-первых, если пианино не будет, то о написании музыки для пианино можно говорить только в теоретической плоскости.
во-вторых, если пианино фальшивит, часть звуков не издает, а периодически еще и поскрипивыает, то опять же говорить о написании хорошей музыки очень и очень тяжело.

kokoc88

во-первых, если пианино не будет, то о написании музыки для пианино можно говорить только в теоретической плоскости.
Вот именно. И поэтому не надо на Си придумывать объекты и полиморфизм.
Я же говорю о том, что наличие набора каких-то свойств языка никак не помогает тебе разбить код на этом же языке более правильно.

6yrop

MVC для WEB-а (для какого WEB-а?) и Swing - вещи вовсе не разные.
и как понимать вот эту фразу для свинга?
A view uses the model indirectly to generate an appropriate user interface

kokoc88

и как понимать вот эту фразу для свинга?
A view uses the model indirectly to generate an appropriate user interface
Так и понимать, в чём проблема-то?

6yrop

Я же говорю о том, что наличие набора каких-то свойств языка никак не помогает тебе разбить код на этом же языке более правильно.
Во-первых, наличие возможностей в языке позволяет устроить разбиение с использованием этих возможностей. С этим ты не будешь спорить?
Второе, надо выяснить разбиение с использованием этих возможностей является ли более правильным или нет? Тут надо определиться, как мерить правильность.

6yrop

Так и понимать, в чём проблема-то?
т.е. когда я кликаю один раз по строчке в гриде, просто выделение строчки — у меня генерируется пользовательский интерфейс?

Dasar

Вот именно. И поэтому не надо на Си придумывать объекты и полиморфизм.
Я же говорю о том, что наличие набора каких-то свойств языка никак не помогает тебе разбить код на этом же языке более правильно.
вот тут совсем не понимаю
изначально постулируется, что правильность разбиение должно идти от решаемой задачи, а не от языка; из твоей же фразы следует, что наоборот правильность разбияния должна идти от языка, а не от задачи.
поясни, пожалуйста, ты придерживаешься каких-то других постулатов, или я тебя просто неправильно понял?
если у нас по решаемой задачи есть объекты, есть полиморфизм, то значит правильное разбиение будет такое, где эти объекты, полиморфизм есть.
возьмем те же самые файлы(потоки они и на С реализованы как полиморфные объекты.
но из-за недостатков языка решение получилось неудобным, т.к. добавление свойего файла(потока) делается непонятно как.

kokoc88

т.е. когда я кликаю один раз по строчке в гриде, просто выделение строчки — у меня генерируется пользовательский интерфейс?
Если цепляться к тому, что написано в википедии, то да, именно так. Представление окрасит нужную строку модели в другой цвет. Картинка пользовательского интерфейса изменится. Если тебе не понятно, как MVC используется для отдельных контролов, поищи какие-нибудь туториалы в интернете.

timefim

SWING объектно-ориентированный
А можно пример для не сведущих?

6yrop

Тут надо определиться, как мерить правильность.
по мне так
1. максимальное соблюдение принципа Don't repeat yourself.
2. легкость рефакторинга, т.е. чем проще рефакторится, тем код более правильный
3. возможно, еще что-то

kokoc88

из твоей же фразы следует, что наоборот правильность разбияния должна идти от языка, а не от задачи
Это не из моей, а из поста, на который я отвечал. Фактически там было написано, что "доступные средства языка помогают найти правильное разбиение задачи на доступные средства языка". Мне кажется, что это утверждение неверно.

6yrop

Если цепляться к тому, что написано в википедии
хорошо, дай правильное определение MVC или ссылку на него.

kokoc88

А можно пример для не сведущих?
А гуглом несведущие пользоваться не умеют?
http://www.java2s.com/Tutorial/Java/0240__Swing/UnderstandingthePredefinedDataModelsSwingComponentModels.htm

Dasar

я нифига не понял.
все как-то очень в кучу.
GOF хороши тем, что они сели, потратили время, зафиксировали и назвали стандартные способы компоновки приложений.
т.е. чуваки сели и записали, что вода мокрая, солнце желтое, а трава зеленая.
вот именно за это им и спасибо, что они:
во-первых, зафиксировали, в меру своего понимания, то что есть
во-вторых, дали отправную точку для дальнейшего понимания.
какое отношение к этому имеет что где-то кто-то требует наизусть слово в слово цитировать их книгу - я не понимаю.

kokoc88

хорошо, дай правильное определение MVC или ссылку на него.
Зачем? Пусть будет именно то, что ты написал. Я не нашёл никаких противоречий. Модель изменилась, представление перерисовало себя на основе модели.

kokoc88

т.е. чуваки сели и записали, что вода мокрая, солнце желтое, а трава зеленая
Тогда не понятно, почему большинство разработчиков считают солнце синим, воду сухой, а траву вообще в глаза не видели...

Serab

Мне кажется, что тут что-то не так. MVC подразумевает наличие нескольких V, отвечающих одной M, так? И что, мне для добавления нового V надо изменять M? Я к тому, что текущее выделение — это свойство V, а не M. Что-то тут явно не так.

Dasar

Это не из моей, а из поста, на который я отвечал. Фактически там было написано, что "доступные средства языка помогают найти правильное разбиение задачи на доступные средства языка". Мне кажется, что это утверждение неверно.
ок. давай эту спорную фразу сформулируем так:
решаемую задачу необходимо правильный образом разбивать на определенные подэлементы.
если эти подэлементы есть в языке и удобно реализованы, то задача правильность разбиения на эти подэлементы решается намного проще.
с такой формулировкой согласен?

kokoc88

Мне кажется, что тут что-то не так. MVC подразумевает наличие нескольких V, отвечающих одной M, так? И что, мне для добавления нового V надо изменять M? Я к тому, что текущее выделение — это свойство V, а не M. Что-то тут явно не так.
Когда кажется, креститься надо. Выделение - это свойство модели. Например, такое: int getSelectedRowIndex

kokoc88

если эти подэлементы есть в языке и удобно реализованы, то задача правильность разбиения на эти подэлементы решается намного проще.
с такой формулировкой согласен?
Согласен с тем, что задача разбиения решается проще. Но это никак не связано с правильностью решения. :)

timefim

Несведущие не хотят изучать мануалы, а хотят пять строк кода в которых была бы раскрыта суть утверждения.

Serab

Выделение - это свойство модели.
Где, в той реализации, за которую ты высказываешься? Я это и так понял из твоего предыдущего поста. Так объясни, что мне делать, если я хочу создать еще один V.

kokoc88

Несведущие не хотят изучать мануалы, а хотят пять строк кода в которых была бы раскрыта суть утверждения.
Суть утверждения раскрыта по ссылке, которую привели несведущим.

Dasar

Тогда не понятно, почему большинство разработчиков считают солнце синим, воду сухой, а траву вообще в глаза не видели...
тут надо различать ситуации:
по-первой, у них действительно солнце синее, вода - сухая, а на траву им пофигу.
по-второй, действительно все плохо, и они заблуждаются.
мы сейчас о какой ситуации говорим?

kokoc88

Где, в той реализации, за которую ты высказываешься? Я это и так понял из твоего предыдущего поста. Так объясни, что мне делать, если я хочу создать еще один V.
Тебе надо написать ещё один V.

kokoc88

по-второй, действительно все плохо, и они заблуждаются.
мы сейчас о какой ситуации говорим?
О второй. Я говорю о том, что наличие книжки помогает открыть глаза на то, что блин, трава-то зелёная. (Ну или в случае генома, что её можно курить...)

Serab

допустим этот V можно будет поворачивать на 90 градусов, что производится выбором пункта меню. Это состояние тоже надо хранить в M?

kokoc88

допустим этот V можно будет поворачивать на 90 градусов, что производится выбором пункта меню. Это состояние тоже надо хранить в M?
Как это относится к теме и к вопросу Шурика? Давай не будем уводить обсуждение куда-то в сторону.
 
и как понимать вот эту фразу для свинга?
 
--------------------------------------------------------------------------------
A view uses the model indirectly to generate an appropriate user interface

Я это всё к тому, что мы здесь не обсуждаем, какой код надо пихать в модель, а какой в представление. Обычно визуальные части типа цвета, шрифта, толщины линий, угла наклона и прочее кладут в представление. В модель идут части бизнес логики, и в случае грида текущая выбранная строка является именно свойством модели.

6yrop

Модель изменилась, представление перерисовало себя на основе модели.
но вот эти две фразы
генерируется пользовательский интерфейс

представление перерисовало себя на основе модели

для меня сильно разные. Я, конечно, могу отдать дань словоблудию авторов, и слово "генерируется" понимать сильно в обобщенном смысле. Но тогда само определение MVC слишком общо и никакой практической ценности не представляет (о чем я и говорил выше).
P.S. Для веба, например, в ASP.NET MVC контроллер, действительно, выбирает какое представление будет сгенерировано.

timefim

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class ButtonSample {
public static void main(String args[]) {
Runnable runner = new Runnable {
public void run {
JFrame frame = new JFrame("Button Sample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button = new JButton("Select Me");
// Define ActionListener
ActionListener actionListener = new ActionListener {
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("I was selected.");
}
};
// Attach listeners
button.addActionListener(actionListener);
frame.add(button, BorderLayout.SOUTH);
frame.setSize(300, 100);
frame.setVisible(true);
}
};
EventQueue.invokeLater(runner);
}
}

И где тут нужно угледеть ОО?

Serab

Как это относится к теме и к вопросу Шурика? Давай не будем уводить обсуждение куда-то в сторону.
От какой темы? Мы тут обсуждаем то, что навязывать модель MVC вместе со средствами разработки интерфейса по-твоему хорошо.
Или по-другому. Ты отвечал 'у примером выполнения этого предложения, так? И я вот указал на неочевидность правильности этого решения. Так что от темы я не удалялся. Но если ты против, могу и забить.

Serab

И где тут нужно угледеть ОО?
class

Serab

В модель идут части бизнес логики, и в случае грида текущая выбранная строка является именно свойством модели.
Вот с этим не спорю. Но там выше говорили о том, что этот грид в принципе должен так работать. Ладно, я не знаю этот ваш Swing, просто хотел спросить.

Dasar

кстати ответ тебя, как адепта хрестоматийного MVC, был бы очень интересен: где должно хранится состояния самого view?

kokoc88

для меня сильно разные. Я, конечно, могу отдать дань словоблудию авторов, и слово "генерируется" понимать сильно в обобщенном смысле. Но тогда само определение MVC слишком общо и никакой практической ценности не представляет (о чем я и говорил выше).
Так я тебе любую технологию подведу под "слишком общо и никакой практической ценности не представляет". Ты автотесты никогда не писал? А программу, в которой веб и не-веб морда делал?

kokoc88

кстати ответ тебя, как адепта хрестоматийного MVC, был бы очень интересен: где должно хранится состояния самого view?
Вообще-то я адепт MVP с Passive View. Я же ответил чуть выше, что думаю именно про MVC: цвет, шрифт, угол поворота - в представлении, но только если что-то из этого не является частью бизнес логики.

kokoc88

И где тут нужно угледеть ОО?
Я не знаю где "тут", а по приведённой выше ссылке его углядеть можно.

Dasar

Вообще-то я адепт MVP с Passive View. Я же ответил чуть выше, что думаю именно про MVC: цвет, шрифт, угол поворота - в представлении, но только если что-то из этого не является частью бизнес логики.
т.е. view имеет прямой доступ к базе, чтобы это, например, сохранить?

6yrop

Вообще-то я адепт MVP
в свиге вроде поумолчанию предлагает MVC. Тогда как сочетается твоя любовь к свингу и MVP?

kokoc88

т.е. view имеет прямой доступ к базе, чтобы это, например, сохранить?
Откуда ты сделал такой вывод?

kokoc88

а свиге вроде поумолчанию предлагает MVC. Тогда как сочетается твоя любовь к свингу и MVP?
Очень просто, у меня нету любви к свингу.

6yrop

но только если что-то из этого не является частью бизнес логики
опа :), тогда четкий критерий, что является бизнес логикой, а что нет, в студию.

Serab

Там еще C есть :smirk:

6yrop

Очень просто, у меня нету любви к свингу.
ну я о чем и говорил — он так и не взлетел

kokoc88

опа , тогда четкий критерий что является бизнес логикой, а что нет, в студию.
Мне что, нечем больше заняться, как составлять чёткие критерии на форуме? В случае грида выделенная строка является частью бизнес логики, этого должно быть достаточно.

kokoc88

ну я о чем и говорил — он так и не взлетел
А кто взлетел-то? Я вижу, что аргументы подошли к концу? Ну тогда дискуссию можно закрыть и сделать вывод, что платформа Java пока что не сливает платформе .NET

Dasar

? В случае грида выделенная строка является частью бизнес логики, этого должно быть достаточно.
а в одном гриде я имею право вывести две разные модели (две разные бизнес логики)?

Serab

Ну не факт же. Вот например, если приложение осуществляет read-only доступ к данным, а выделение предусмотрено исключительно для удобства пользователя, то можно и не включать, а оставить свойством V.

6yrop

А кто взлетел-то?
Java Swing это такая замечательная технология, на которой никто не пишет :)

kokoc88

Вот например, если приложение осуществляет read-only доступ к данным, а выделение предусмотрено исключительно для удобства пользователя, то можно и не включать, а оставить свойством V.
Есть такая цитата: когда пишешь код, думай про тесты; когда пишешь тесты, думай про код. Конечно, не факт и не обязательно. Но чем больше кода покрывается тестами, тем лучше. MVC с этой точки зрения далеко не идеален.

6yrop

Я вижу, что аргументы подошли к концу?
я вижу, что все мои аргументы остались открытыми.... Посты либо остались не отвечеными, либо ответы порадили новые вопросы.

Serab

Мы тут обсуждаем еще этап проектирования.
Но за цитату спасибо, мне понравилось, раньше не встречал.

kokoc88

я вижу что все мои аргументы остались открытыми....
Процитируй список в одном посте, а то я не могу тебя понять.

kokoc88

а в одном гриде я имею право вывести две разные модели (две разные бизнес логики)?
Кажется, ты меня не понял. Я говорю про бизнес логику грида как элемента GUI: количество строк, выделение, доступ к источнику данных и так далее.
Я просто запутал тебя тем, что выразился термином, который я интерпретирую немного по своему (более широко и возможно неправильно).

Dasar

Кажется, ты меня не понял. Я говорю про бизнес логику грида как элемента GUI: количество строк, выделение, доступ к источнику данных и так далее.
да, я не понимаю, как можно провести четкую границу: что вот здесь еще вью, а вот здесь уже модель.
и соответственно считаю что, в большинстве, случаев эту границу проводить и не надо.
а надо чтобы зависимостей между кусочками кода было как можно меньше.
т.е. я не понимаю за чем необходимо делать явное разбиение на модель, вью и контроллер, пока у нас отношения 1:1:1,
но, в тоже время, надо, конечно, прикинуть что вот внутри класса есть вот такие более-менее независимые части, и соответственно друг от друга их отделить
даже вот в том же куске который запостил идет нарушение независимости (идет нарушение mvc)
лучше было так

// создаем и настраиваем frame
JFrame frame = new JFrame("Button Sample");
frame.setSize(300, 100);

//создаем и настраиваем button
JButton button = new JButton("Select Me");
// Define ActionListener
ActionListener actionListener = new ActionListener {
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("I was selected.");
}
};
// Attach listeners
button.addActionListener(actionListener);

frame.add(button, BorderLayout.SOUTH);

// принимаем бизнес решение о том, что при закрытии frame должно закрыться приложение
// причем вообще непонятно почему именно форме указывается, что приложение должны завершаться,
// а не приложению указывается, что оно должно работать, пока есть форма.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// показываем окно на экране
frame.setVisible(true);

kokoc88

да, я не понимаю, как можно провести четкую границу: что вот здесь еще вью, а вот здесь уже модель.
и соответственно считаю что, в большинстве, случаев эту границу проводить и не надо.
а надо чтобы зависимостей между кусочками кода было как можно меньше.
Надо, чтобы зависимостей было меньше не только между кусочками кода, но и между классами. (Или ты это и имел ввиду?) Границу проводить надо хотя бы для того, чтобы можно было покрыть большую часть кода простыми независимыми автотестами.
т.е. я не понимаю за чем необходимо делать явное разбиение на модель, вью и контроллер, пока у нас отношения 1:1:1
Автотесты; программы с "двойным" GUI: WEB + Desktop; программы, работающие как с GUI, так и без; улучшение качества кода. Так что лучше всегда отделять view, а model и controller можно сливать в один класс при малом их размере. Из всех трёх классов обычно controller содержит меньше всего кода.

6yrop

Автотесты; программы с "двойным" GUI: WEB + Desktop; программы, работающие как с GUI, так и без;
вот это конкретные требования к ПО, и программист на WinForms/WPF реализует эти требования, если они будут выставлены. Причем, наверняка будут задействованы те фичи языка, которые я приводил.
 
улучшение качества кода.

а это не конретная вещь... :grin:

Dasar

Границу проводить надо хотя бы для того, чтобы можно было покрыть большую часть кода простыми независимыми автотестами.
это самоцель?
почему нельзя покрыть форму целиком тестами, зачем ее для этого надо обязательно сначала порезать?

kokoc88

вот это конкретные требования к ПО, и программист на WinForms/WPF реализует эти требования, если они будут выставлены. Причем, наверняка будут задействованы те фичи языка, которые я приводил.
Естественно, программист реализует любые требования. Это его работа. Другой вопрос, какие качество и расширяемость будут у этой реализации.
Причем, наверняка будут задействованы те фичи языка, которые я приводил.
То есть без linq expressions или без lambda нельзя выполнить приведённые требования? Мне лично кажется, что использование или неиспользование этих вещей никак не повлияет ни на количество багов, ни на расширяемость.
улучшение качества кода.
-------------------------------------------------------------------------------
а это не конретная вещь...

Ну для кого-то может быть и не конкретная. Слава богу, я к таким не отношусь.

kokoc88

это самоцель?

А что, есть ещё те, кто не понимает ценность автоматического тестирования кода? Конечно, это одна из важных целей и многие паттерны сделаны были изначально для улучшения качества автоматического тестирования.
почему нельзя покрыть форму целиком тестами, зачем ее для этого надо обязательно сначала порезать?
Я удивлён, что ты задаёшь такой вопрос... Нет, конечно можно написать тестируемую форму целиком, просто наплевав на SRP. Получится прекрасный пример решения вида MainClass.

Serab

Естественно, программист реализует любые требования. Это его работа. Другой вопрос, какие качество и расширяемость будут у этой реализации.
Нормальная там будет расширяемость, либо требования неправильные описаны. Ну что ты тут софистикой занимаешься?
То есть без linq expressions или без lambda нельзя выполнить приведённые требования? Мне лично кажется, что использование или неиспользование этих вещей никак не повлияет ни на количество багов, ни на расширяемость.
выше написал, что приведенные требования можно выполнить вообще без классов, на чистом C. Что, это никак не повлияет ни на количество багов, ни на расширяемость, ни на затраты на разработку? Повлияет. Средства языка уменьшают как затраты на разработку, так и влияют на количество багов.
Я к тому, что ты зря на эту дорожку ступил (точнее вернулся): изначально разговор шел о возможностях языка, ты встал на защиту абсурдной точки зрения о том, что можно и без лишних возможностей обойтись, сумел ловко перевести разговор в область ООП, MVC, и что же? Какая оплошность, ты снова отстаиваешь абсурдные вещи.

6yrop

расширяемость будут у этой реализации
тоже вполне конкретное требование, в том смысле, что реально видно на протяжении жизни проекта

kokoc88

Нормальная там будет расширяемость, либо требования неправильные описаны. Ну что ты тут софистикой занимаешься?
В решении вида MainClass расширяемости не будет. Кроме того требования на расширяемость влиять никак не должны, потому что они постоянно меняются.
Средства языка уменьшают как затраты на разработку, так и влияют на количество багов.
Ты не понял. Речь идёт немного о другом.
Я к тому, что ты зря на эту дорожку ступил (точнее вернулся): изначально разговор шел о возможностях языка, ты встал на защиту абсурдной точки зрения о том, что можно и без лишних возможностей обойтись, сумел ловко перевести разговор в область ООП, MVC, и что же?

Я никуда не вступал. И разговор никуда не переводил. На MVC заехали исключительно из-за того, что начали сравнивать платформы, а не языки.
 
Какая оплошность, ты снова отстаиваешь абсурдные вещи.

Для меня форум - это не детский сад и не игра в политику. Либо будь конктретнее, либо иди на хуй.

Serab

В решении вида MainClass расширяемости не будет. Кроме того требования на расширяемость влиять никак не должны, потому что они постоянно меняются.
Ну причем тут твой MainClass, ты утверждаешь, что некоторые удобные возможности лишние, это абсурд. Ты утверждаешь, что использование платформы или языка (!) влияет на расширяемость. Причем языка с большими возможностями. Никто не заставляет писать кривые программы.
Для меня форум - это не детский сад и не игра в политику. Либо будь конктретнее, либо иди на хуй.
Ты сначала отделяешь предложение от связного текста, а потом не можешь понять что написано, как следствие нервничаешь.

Dasar

Я удивлён, что ты задаёшь такой вопрос... Нет, конечно можно написать тестируемую форму целиком, просто наплевав на SRP. Получится прекрасный пример решения вида MainClass.
и в чем будут минусы?
давай возьмем кусок кода который был выше, ты согласен с тем, что это решение вида mainclass?
я правильно понял, что ты предлагаешь его разбить на три класса мотивируя тем, что его будет проще тестировать?

kokoc88

Ну причем тут твой MainClass, ты утверждаешь, что некоторые удобные возможности лишние, это абсурд.
Приведи цитату, где я утверждал подобное.
Ты утверждаешь, что использование платформы или языка (!) влияет на расширяемость.

Цитату.

Serab

Еще раз:
вот это конкретные требования к ПО, и программист на WinForms/WPF реализует эти требования, если они будут выставлены. Причем, наверняка будут задействованы те фичи языка, которые я приводил.
Естественно, программист реализует любые требования. Это его работа. Другой вопрос, какие качество и расширяемость будут у этой реализации.
Ну так и какие же качество и расширяемость будут? Почему на .NET они должны быть хуже?

6yrop

Кроме того требования на расширяемость влиять никак не должны, потому что они постоянно меняются.
Смотря какие требования. Сам заказчик, конечно, не будет вписывать расширяемость в требования, поскольку для заказчика расширяемость кода это пустой звук. Требования расширяемости кода выдвигает ведущий программист — поскольку уже видел жизненный цикл нескольких проектов.
А удовлетворять тому, что не является требованием к продукту, вот это действительно бред.

Serab

Цитату.
Вот, в предыдущем моем посте.

kokoc88

и в чем будут минусы?
В чём будут минусы объяснено в той же википедии. Вести дискуссию на тему правильности SRP я не хочу, потому что не вижу в ней смысла. Для меня это всё равно, что доказывать, что Земля не плоская.
давай возьмем кусок кода который был выше, ты согласен с тем, что это решение вида mainclass
Да, кусок кода сверху является решением вида MainClass. И такие решения потом занимают десятки тысяч строк кода. Естественно, я не требую разбить этот конкретный десятистрочный туториал на три класса. И если мне надо будет написать подобный, то я так и поступлю (напишу MainClass).

Dasar

В чём будут минусы объяснено в той же википедии. Вести дискуссию на тему правильности SRP я не хочу, потому что не вижу в ней смысла. Для меня это всё равно, что доказывать, что Земля не плоская.
т.е. ты не можешь объяснить почему разбиение на три класса m v с более srp, чем тоже самое через mainclass?

kokoc88

Ну так и какие же качество и расширяемость будут? Почему на .NET они должны быть хуже?
Windows Forms выпестовала кучу программистов, решающих задачи с помощью антипаттерна MainClass. Это произошло в частности от того, что всякие визарды и автоматизаторы студии сами предлагают именно такие решения, как в WF, так и в WPF. Здесь обсуждается не то, будут ли решения хуже на .NET, а утверждается, что решения будут хуже, если принципиально отрицать полезность MVC/MVP/DV.

kokoc88

т.е. ты не можешь объяснить почему разбиение на три класса m v с более srp, чем тоже самое через mainclass?
Ты издеваешься, пытаешься развести меня на ошибку, выяснить что я знаю или что? Решение вида MainClass нарушает SRP по определению.

Serab

С тем, что .NET плодит быдлокодеров — абсолютно не спорю.
С тем, что надо задумываться об архитектурных решениях — тоже.
С тем, что наличие готовой модели MVC — более сильный аргумент, чем удобство написания кода, я не согласен.

Dasar

Решение вида MainClass нарушает SRP по определению.
напомню, что те кто прячутся за словами "по определению" обычно сами не понимают о чем они говорят, а лишь пользуются чужими фразами.
ps
я пытаюсь понять, ты понимаешь что и у mainclass, и у mvc есть свои плюсы и минусы, и что они оба, но по своему следует принципу srp, или не понимаешь и лишь пользуется чужими словами о том, что mainclass - это плохо.

6yrop

да, тоже подписываюсь под всеми пунктами

Gaishnik

какое отношение к этому имеет что где-то кто-то требует наизусть слово в слово цитировать их книгу - я не понимаю.:
Они виноваты в этом, потому что книга источает нереальное количество понтов. Некоторые думают, что раз там такая мощная терминология, то за ней что-то стоит, а на самом деле это тупо баззвординг. Авторы создали на пустом месте какую-то теорию, разрекламировали ее и наварили бабла на издании книги.
К архитектуре и проектированию ПО книга не имеет никакого отношения, просто описывает как бороться с недостатками статически типизированных языков без замыканий.
Книга должна называться не Design Patterns, а Coding in Java Patterns.

Dasar

К архитектуре и проектированию ПО книга не имеет никакого отношения, просто описывает как бороться с недостатками статически типизированных языков без замыканий.
в динамическом языке с замыканиями бриджа не будет, или он будет выглядеть как-то по другому?

kokoc88

С тем, что наличие готовой модели MVC — более сильный аргумент, чем удобство написания кода, я не согласен.
Дискуссия, которую ты невнимательно прочитал, дошла до темы "практической бесполезности MVC". Поэтому в данном контексте MVC - это вообще единственный аргумент.
Что касается качества платформы, то будет лучше та, которая предлагает писать правильно, чем та, которая предлагает писать неправильно. Поэтому Java не отмирает, и её продолжают выбирать для многих проектов.

Dasar

Они виноваты в этом, потому что книга источает нереальное количество понтов. Некоторые думают, что раз там такая мощная терминология, то за ней что-то стоит, а на самом деле это тупо баззвординг. Авторы создали на пустом месте какую-то теорию, разрекламировали ее и наварили бабла на издании книги.
К архитектуре и проектированию ПО книга не имеет никакого отношения, просто описывает как бороться с недостатками статически типизированных языков без замыканий.
у меня создается впечатление, что тебя кто-то обидел и эту свою обиду ты связываешь с GOF.
я когда читал эту книгу ни понтов, ни наваривания бабла не увидел.
я лишь увидел, что люди сделали большой шаг вперед и зафиксировали принципы на основе которых они (или их знакомые) проектируют программы.
дальше можно рассуждать, почему именно эти принципы, а не другие, почему надо каждый принцип записывать именно так, а не по другому - но все это не отменяет того хорошего, что содержит книга.

kokoc88

напомню, что те кто прячутся за словами "по определению" обычно сами не понимают о чем они говорят, а лишь пользуются чужими фразами.
ps
я пытаюсь понять, ты понимаешь что и у mainclass, и у mvc есть свои плюсы и минусы, и что они оба, но по своему следует принципу srp, или не понимаешь и лишь пользуется чужими словами о том, что mainclass - это плохо.
За словами по определению часто "прячутся" даже академики. Я не понимаю, почему надо цитировать википедию, чтобы доказать что-то очевидное. MainClass не следует SRP, потому что и для изменения бизнес логики, и для изменения отрисовки нам приходится менять этот класс.
Я просто пытаюсь понять, ты понимаешь, что такое SRP и что MainClass совсем ему не следует.

Dasar

Что касается качества платформы, то будет лучше та, которая предлагает писать правильно, чем та, которая предлагает писать неправильно. Поэтому Java не отмирает, и её продолжают выбирать для многих проектов.
мне всегда казалось, что чем более удобный инструмент становится, то тем больше появляется любителей (а не профессионалов) и тем сильнее падает средний уровень людей, которые используют данный инструмент.
но из этого же не следует, что инструмент не должен становиться удобнее.
да, .net становится все удобнее и удобнее, причем как для профессионалов, так и для любителей.
но какое отношение все это имеет к качеству платформы?

Dasar

MainClass не следует SRP, потому что и для изменения бизнес логики, и для изменения отрисовки нам приходится менять этот класс.
не понимаю почему единицой атомарности считается именно класс, а не строчка кода.
а? почему?
тебя зазомбировали злые проприетарщики, которые не давали доступ в детстве к исходному коду?

Serab

Дискуссия, которую ты невнимательно прочитал, дошла до темы "практической бесполезности MVC". Поэтому в данном контексте MVC - это вообще единственный аргумент.
Я внимательно читал, про практическую бесполезность MVC тут никто не говорит. Даже в том сообщении, что ты цитировал, я высказывался за правильные архитектурные решения, которым очень часто является MVC.
Что касается качества платформы, то будет лучше та, которая предлагает писать правильно, чем та, которая предлагает писать неправильно. Поэтому Java не отмирает, и её продолжают выбирать для многих проектов.
Это утверждение надо доказывать. Мне вот не нравится, когда меня заставляют писать код каким-то определенным образом. Я сам знаю (а если не я, то более опытные коллеги) как создавать адекватную архитектуру.

kokoc88

не понимаю почему единицой атомарности считается именно класс, а не строчка кода.
а? почему?
При чём тут единица атомарности? Ты ещё спроси, почему единицей атомарности не является один символ в исходниках. Или вообще один бит, почему?

Dasar

При чём тут единица атомарности? Ты ещё спроси, почему единицей атомарности не является один символ в исходниках. Или вообще один бит, почему?
символ является, поэтому если последующие изменения можно свести к изменение лишь одного символа, то лучше так и делать, а не городить стопятнадцать классов для этого.
бит не является, потому что редакторы не предлагают удобных способов по его атомарному изменению.

kokoc88

Я внимательно читал, про практическую бесполезность MVC тут никто не говорит. Даже в том сообщении, что ты цитировал, я высказывался за правильные архитектурные решения, которым очень часто является MVC.
При чём тут ты. Прочитай всю тему.
Это утверждение надо доказывать. Мне вот не нравится, когда меня заставляют писать код каким-то определенным образом. Я сам знаю (а если не я, то более опытные коллеги) как создавать адекватную архитектуру.

Да, все знают, как сделать более правильное, квадратное колесо. Нет уж, лучше пусть заставляют делать его круглым.

kokoc88

символ является, поэтому если последующие изменения можно свести к изменение лишь одного символа, то лучше так и делать, а не городить стопятнадцать классов для этого.
Эта фраза лишь означает, что ты не в курсе, что такое SRP. Или понял свою ошибку и пытаешься вывести определение в какую-то другую систему координат. Если у тебя какое-то своё, отдельное определение SRP, то следует так и сказать и быть готовым доказать его пригодность, практическую и теоретическую. А вот стандартное определение SRP я доказывать не обязан (это уже сделано автором и могу ссылаться на него сколько угодно.

Serab

При чём тут ты. Прочитай всю тему.
Я там написал: никто не говорил, что MVC — в принципе бесполезна. Если кто-то говорил — пусть кинет в меня камень.

Serab

Да, все знают, как сделать более правильное, квадратное колесо. Нет уж, лучше пусть заставляют делать его круглым.
Ну это тебе надо, чтобы тебя заставляли. Ничего страшного, люди разные. Объективной аргументации все же не видно.

kokoc88

Ну это тебе надо, чтобы тебя заставляли. Ничего страшного, люди разные. Объективной аргументации все же не видно.
Конечно, круглое колесо не может быть аргументом для того, кто на все двести процентов уверен, что изобретённое им квадратное всё равно лучше.

Dasar

какой-то ты скучный троль, даже не можешь объяснить почему класс более srp, чем строка кода или символ.

Serab

Мне насрать на тех, кто создаст квадратные колеса. Никто не запретит мне писать интерфейс на .NET в модели MVC.
Главное не забывать, что если тебе дали уже кругловатые колеса, то тебе стоит не забыть сделать и остальные детали велосипеда прямыми.

Serab

Ну это некорректный вопрос. SRP подразумевается на нескольких уровнях сразу: то, что у строки кода одна обязанность обычно подразумевается, делать функции удовлетворяющими srp все-таки большинство умеет. Следить за выполнением SRP на уровне классов позволю себе сказать, что еще важнее, потому что разбить функцию на две гораздо проще, чем класс.

Dasar

Ну это некорректный вопрос. SRP подразумевается на нескольких уровнях сразу: то, что у строки кода одна обязанность обычно подразумевается, делать функции удовлетворяющими srp все-таки большинство умеет. Следить за выполнением SRP на уровне классов позволю себе сказать, что еще важнее, потому что разбить функцию на две гораздо проще, чем класс.
с этим со всем согласен.
но мне пока mike не объяснил зачем мне разбиение одного класса на три m, v, с - если между ними отношение 1:1:1.
или зачем мне выделять С из V, если у меня отношения M к V как 1:2, а V к C как 1:1.
или зачем рассматривать тест как отдельный view, а не как часть имеющегося класса?

kokoc88

какой-то ты скучный троль, даже не можешь объяснить почему класс более srp, чем строка кода или символ

Тролля ты видишь в зеркале.
зачем мне разбиение одного класса на три m, v, с - если между ними отношение 1:1:1
Тебе - незачем.

Dasar

Тебе - незачем.
а тебе зачем?
потому что так было написано в "библии"?

Serab

Если система создается с хотя бы мизерной возможностью дальнейшего развития, то я не вижу причин, чтобы не разделить все сразу.
И вообще, если исходя из своего опыта не можешь сделать выбор между двумя архитектурными решениями, и спросить не у кого, либо всем похуй, то надо сделать одним из способов и не тратить время. It's all about decisions. Надо просто сделать выбор.

Dasar

Если система создается с хотя бы мизерной возможностью дальнейшего развития, то я не вижу причин, чтобы не разделить все сразу.
пример такого разделения из своего опыта можно?

Serab

ты очень резко относишься к обсуждениям на форуме. Тебе стоит изменить свое отношение в сторону "как к детскому саду" (ты писал выше). Ты думаешь, что тебя тут хотят задеть или как-то унизить. Так вот это совершенно не так. Мы тут пытаемся подумать, поразмышлять (в этом разделе по крайней мере).

Dasar

Если система создается с хотя бы мизерной возможностью дальнейшего развития, то я не вижу причин, чтобы не разделить все сразу.
разве это не premature optimization?

kokoc88

потому что так было написано в "библии"?
Потому что я понимаю, что не все мои решения будут лучше тех, которые предлагают другие люди. И не ищу философские неточности в определениях, чтобы отмазаться от своих ошибок.

Serab

Я не понимаю, какого рода пример и зачем? Примеры есть очевидные.
Если хочешь из своего опыта, то пускай: был интерпретатор модельного языка с редактором кода и еще одним отображением, соответствующим результатам работы. Строго MVC там не соблюдался, писал давно, последнее время не занимаюсь написанием интерфейсов.

Dasar

Я не понимаю, какого рода пример и зачем? Примеры есть очевидные.
мне не нужны очевидные, мне нужные реальные (из реальной жизни)
а то часто очевидность никакого отношения к реальности не имеет.
Если хочешь из своего опыта, то пускай: был интерпретатор модельного языка с редактором кода и еще одним отображением, соответствующим результатам работы.
т.е. было разделение на модель и два вью? причем два вью уже были (а не подразумевались, что когда-то будет такое возможно)
но исходно ты сказал другое, что если у нас на руках есть отношение 1:1:1, то все равно надо сделать разбиение под будущие изменения.
и я тебя попросил привести именно пример вот этого утверждения, причем из своего опыта.
пока получается, что ты говоришь, что надо разбивать, но при этом привести пример из своей практике не можешь, когда ты так делал.
если не помнишь, не хочешь и т.д. приводить свой реальный, тогда хотя бы придумай похожий на реальный (но именно реальный, а не очевидный)

Serab

Тем не менее, потом я добавил еще одно отображение для вывода текстовой информации.
Нет, я не понимаю. Почему именно MVC? Вот приведу такой пример: я пришел работать сейчас в фирму. Тут была система тестирования производительности основного продукта. Мне в качестве тестового задания предложили встроить в нее модуль тестирования продукта конкурентов. Так вот хотя изначально тестировался только один продукт, разделение на две отдельных подсистемы уже было произведено. Причем очень давно. Это позволило мне не заниматься этим разделением и выполнить задание со свистом. Мне даже не пришлось досконально разбираться в исходниках системы тестирования, я просто изучил необходимый интерфейс модуля тестирования и реализовал его по аналогии.
Оставить комментарий
Имя или ник:
Комментарий: