Просмотр полной версии : Кто что для себя понял по mvc?
Godwarlock
23.03.2018, 03:26
Кто для себя что понял изучив mvc и в последствии модифицировав его во многие структуры тесно связанные со схемой этого формирования. Или может есть пик организации какой-то сложной структуры и дальше идти некуда?
caseyryan
23.03.2018, 08:40
и в последствии модифицировав его во многие структуры
Интересная фраза) Может ты имел в виду "интегрировав"?
Не понял смысла темы. Но если тебе интересно как сделать, чтобы твои программы не заходили в тупик, изучи принципы SOLID
ZergMaster
23.03.2018, 12:05
для меня mvc хорошо проиллюстрировала принцип модульности, раскрыла его, помогла писать более ООПэшный ООПэ. Не сказал бы, что я сейчас ему скрупулезно всегда следую. Главная задача - разделить полномочия так, чтобы никто ни о чем не догадывался.
Понял, что все об этом трещат, но толком никто не реализует :)
А если реализует - то "правильной" реализацию считает лишь реализатор :)
Сугубо субъективная вещь.
undefined
24.03.2018, 21:57
а мне вот интересно возможен ли mvc без событий(на колбэках),ведь колбэк за собой тянет еще и скоуп,где он описан,от чего ,вся троица получается тесно связана.
Например в жаве,в контроллере:
model.doSomething(new OnSomethingCompleted{
public void onCompleted() {
someControllerMethod();
}
})
Т.е. формально модель,храня ссылку на колбэк,хранит еще и ссылку на контроллер.Аналогично и для пары вью-контроллер.
Godwarlock
24.03.2018, 22:10
Интересная фраза) Может ты имел в виду "интегрировав"?
Не понял смысла темы. Но если тебе интересно как сделать, чтобы твои программы не заходили в тупик, изучи принципы SOLID
Программы в тупик из-за структуры зайти никак не могут(во всяком случае у меня))), тупик может возникнуть разве что при реализации какого-то сервиса. Например распознание речи, нейросети и т.п) Это те вещи, которые мне пока достаточно сложно освоить, но в будущем очень хотелось бы. Но по большей части, наверно мне хотелось бы вычерпнуть из реализации mvc, какой-то определенный стопудовый шаблон, который подойдет для любой программы. Сейчас у меня есть некий шаблон такой, но я чувствую и вижу где-то неправильную его реализацию. Надо подольше посидеть и подумать над этим. Я очень редко использую собственные расширения наследования и интерфейсов. В основном наследуюсь от нативных компонентов, спрайты, скроллы, текстфилды и прочие стандарты, в основном для вьюхи, для моделей и контроллеров. Тут вопрос спорный. Я пока не очень понимаю, зачем мне например создавать класс характеристик и чтобы персонаж или противник наследовал этот класс, присваивая себе характеристики. Кода в классах будет меньше и не более, да и мне например гораздо проще будет сразу вписать в класс персонажа все его характеристики, потому что несмотря даже на то, что есть еще противник с идентичными свойствами, могут быть какие-то другие, которые к классу игрового персонажа никак не относятся, но при наследовании, они будут и у противника, и у персонажа, даже если он не использует какие-то свойства, предназначенные только противнику. Что касается интерфейсов. В них я вообще еще пока смысла не увидел, сколько бы не пытался начинать создавать сервис именно с интерфейсов. Во всяком случае, если кодом занимается только 1 человек и никому исходник передаваться не будет. Хотя по поводу наследования, наверно это один из тех моментов, когда нужно разделить обязанности. И где бы я использовал собственные расширения наследования, это только там, где мне нужно получить свойства через getterы. Чтобы отделить основную логику, от получения нужных свойств. Что-то вроде такой структуры Model(Logic-Get-Set-Params). Вот как то так.
а мне вот интересно возможен ли mvc без событий(на колбэках),ведь колбэк за собой тянет еще и скоуп,где он описан,от чего ,вся троица получается тесно связана.
Например в жаве,в контроллере:
model.doSomething(new OnSomethingCompleted{
public void onCompleted() {
someControllerMethod();
}
})
Т.е. формально модель,храня ссылку на колбэк,хранит еще и ссылку на контроллер.Аналогично и для пары вью-контроллер.
Щито?
Callback-и - просто менее удобны чем события.
Но то что ты пишешь, я даже интерпретировать не могу.
Из твоего кода, могу предположить, что контроллер подписывается на какой-то сигнал модели, все, причем тут что там захватывает callback? Он захватил ссылку на model? Так судя по коду она у тебя и так есть, он захватил ссылку на контроллер, и...?
зы
Java, какая-то у тебя старая, функции уже давно можно передавать на прямую, без классов - обвязок :)
undefined
24.03.2018, 22:28
Щито?
Callback-и - просто менее удобны чем события.
Но то что ты пишешь, я даже интерпретировать не могу.
Из твоего кода, могу предположить, что контроллер подписывается на какой-то сигнал модели, все, причем тут что там захватывает callback? Он захватил ссылку на model? Так судя по коду она у тебя и так есть, он захватил ссылку на контроллер, и...?
зы
Java, какая-то у тебя старая, функции уже давно можно передавать на прямую, без классов - обвязок :)
модель захватила ссылку на контроллер,что супротив mvc разве нет?Ссылка на модель у контроллера должна быть по определению.
давно можно передавать на прямую, без классов - обвязок
Полагаю речь про лямбды?Лямбда - просто сокращенный способ записи того же кода,класс-слушатель все равно требуется.
Модель захватила? Прям вот так? Т.е. можешь прям взять эту ссылку на контроллер и использовать в моделе?
Полагаю речь про лямбды?Лямбда - просто сокращенный способ записи того же кода,класс-слушатель все равно требуется.
Нет, не совсем, я предлагаю почитать про это, и про захват скоупа тоже, там есть интересные особенности, когда он не захватывается, например.
undefined
24.03.2018, 22:43
можно пример как можно передать колбэк без класса-слушателя?
Извини, я тебя сейчас немного не понимаю, и на мой вопрос ты не ответил.
Но я отвечу сам, захваченный callback-ом скоут, который возможно содержит this - того самого контроллера, который ты называешь ссылкой на контроллер в моделе ты дернуть не можешь, потому что ты про него ничего не знаешь.
undefined
24.03.2018, 22:50
да,я понял,это тоже самое что и с событиями.Подписка на событие ведет к точно такой же связанности.
Так что со слушателем без класса?Реально интересно вроде в жаве нельзя передавать ссылки на методы как в js/as3
Java 8
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
numbers.forEach(System.out::println);
да,я понял,это тоже самое что и с событиями.Подписка на событие ведет к точно такой же связанности.
Я совершенно не согласен. Какую-бы реализацию системы сообщений не взять, любая из них лишь гарантирует рассылку сообщения(й), а уж что там в нем(их) будет - зависит от реализации только.
Или я трактовал слово связанность, не так как ты задумал...
undefined
25.03.2018, 00:07
Java 8
Значит таки можно.Не знал.
Или я трактовал слово связанность, не так как ты задумал...
связанность в смысле кто на кого сссылку имеет.То что эта ссылка не доступна дело десятое.Мне просто подход с колбаками как раз кажется более удобным.Никаких подписок/отписок.Хотя по сути это одно и тоже.
Еще раз - это не одно и тоже. Событийная модель, как раз возволяет избежать прямых связей и легко расширяема, в отличии от системы callback-ов. Подписка/отписка тут не причем.
Если говорить в контексте флеша, допустим у тебя есть View внутри которой 100500 кнопок, ты подписываешься на родителя(контейнер) и можешь за счет всплытия поймать событие, скажем, клика по одной из 100500 кнопок. Усложнять я могу до бесконечности.
Система сигналов/callback-ов - хороша, наверное, может быть, только в "плоской" системе, не хочу поднимать и углубляться в эту тему.
Так же стоит не забывать, что есть всякие глобальные менеджеры событий, типа EventBus и т.п.
То что эта ссылка не доступна дело десятое.
Если ты сейчас говоришь про "ссылку", подразумевая то что callback захватил this - это ошибочно. Почему callback не может быть создан в static окружении? То что так происходит технически на флеше не означает, что сущность куда передали callback - автоматически получает в распоряжение захваченное, это техническая реализация замыкания не более, не нужно придумывать проблему там где ее нет и не нужно подменять понятия, пожалуйста.
В MVC речь всегда идет о явных связях, а не о том как какая-то платформа, на какой-то виртуальной машине, после компиляции куда-то что-то сохраняет. У меня все.
UPD
Когда-то давно кто-то тут приводил хороший пример:
Выбегаешь ты на улицу и орешь во весь голос: "ПОЖАР!" - вот кто тебя услышал, тот сообщение и получил, может быть один, может быть 10, а может и никто. Вот она система сообщений, ты не знаешь кто тебя слушает, ты орешь.
А вот взял ты телефон и позвонил в пожарную - вот она система сгнал/слот. Явная связанность.
(Но система прослушки линии не знает, кто звонит, она просто определила звонок и начинает анализировать его, чтобы понять, терорист ты или нет, она явно на тебя не подписывалась, она слушает весь канал)
undefined
25.03.2018, 12:22
Еще раз - это не одно и тоже.
Одно и тоже в смысле степени связности, а не поведения.
Вот она система сообщений, ты не знаешь кто тебя слушает, ты орешь.
Как не знаешь когда у тебя все слушатели записаны?
Добавлено через 17 минут
Почему callback не может быть создан в static окружении?
Не знаю я говорил в контексте явы,там подобная запись вполне допустима:
public class Tmp {
private static String msg="hello world";
public static void method(View view) {
view.setOnClickListener(_v->{
Log.d("hello",msg);
});
}
}
А вот если ты внутри где-либо напишешь this - да,ругнется т.к. this не существует.
Спор явно потерял содержание.Предлагаю закончить
Я понял, что идеального МВЦ не существует, каждый, кто кричит, что нашел идеал - ЛжеФлешер - гоните его, насмехайтесь над ним. МВЦ это такая мечта, к которой должны стремится участники этого форума, но не должны ее достичь, иначе не о чем будет больше мечтать.
Psycho Tiger
29.03.2018, 17:37
Верните мне мой 2010, с мечтами о MVC и способами заливки спрайтов одним шейпом...
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.