@angular2Эта группа больше не существует

Страница 177 из 179
flymithra
05.02.2017
16:18:13
с утками решите сначала
Ну, мам, ну решил

Только не с такой постановкой как у уток
плевать с какой постановкой

marat
05.02.2017
16:19:58
работа с уточкой не должна отличаться от работы с утками

Google
marat
05.02.2017
16:20:28
поэтому это не стратегия

и не композиция, ибо оверхед для уток

marat
05.02.2017
16:22:00
"Есть утка, которая крякает и плавает. Ученые создали искусственную утку, которая может искусственно крякать, искусственно плавать. Как сделать уточку, которая будет искусственно плавать и крякать по-настоящему, без трех реализаций абстрактного класса уточки" » искусственно плавать и крякать по-настоящему

в вашей реализации, уточка не умеет ни плавать, ни крякать

постановка задачи корректна, реализация нет

ps в реальности я бы делал третью реализацию интерфейса

Daniil
05.02.2017
16:27:48
Ну можно вот так извратиться: abstract Strategy { public act() } RealKryaStrategy extends Strategy{ public act(){ } } FakeKryaStrategy extends Strategy{ public act(){ } } RealSwimStrategy extends Strategy{ public act(){ } } FakeSwimStrategy extends Strategy{ public act(){ } } class Utka() public set swimStrategy(str:Strategy) { this.swimStrategy = str; } public set kryaStrategy(str:Strategy) { this.swimStrategy = str } public swim() { this.swimStrategy.act(); } public krya() { this.kryaStrategy.act(); } }

Daniil
05.02.2017
16:28:51
Слишком извращено
Если паттерн стратегия, то..

Nikita
05.02.2017
16:28:57
Daniil
05.02.2017
16:29:05
само по себе сишком извращенно для этого случая

Google
Vladimir
05.02.2017
16:29:43
Если паттерн стратегия, то..
Зачем вам класс стратегия? SwimStrategy, CrackStrategy

Daniil
05.02.2017
16:30:04
interface для метода act

если уж по полной

Vladimir
05.02.2017
16:30:28
Сам класс стратегии не несет в себе смысла, потому что его содержимое - действие. Что как бы не совпадает с названием

Daniil
05.02.2017
16:30:28
чутка перепутал - поправил

Daniil
05.02.2017
16:31:31
сразу ф-ция действия

и никаких проблем

Vladimir
05.02.2017
16:32:23
Можно заменить на ф-ции. В JS так бы и сделал
Суть не в этом. Вы нарушаете посыл вашего кода

Класс Strategy неочевиден

flymithra
05.02.2017
16:34:03
Я правда не понимаю до конца вашей задачи скорее всего, ну как бы зачем мутить так воду, если я могу создавать каких мне угодно уток так ( ДАВАЙТЕ УЖЕ ВЕРНОЕ РЕШЕНИЕ В СТУДИЮ НЕ ТОМИТЕ public class Utka { boolean kra, swi; public Utka (boolean kra, boolean swi) { this.kra = kra; this.swi = swi; } }

Daniil
05.02.2017
16:37:08
Автор, ты сам то помнишь правильный ответ?)

Nikita
05.02.2017
16:45:55
class QuackStrategy { abstract doQuack(); } class RealQuackStrategy : QuackStrategy{ doQuack(){ /* do real quack*/ } } class FakeQuackStrategy : QuackStrategy{ doQuack(){ /* do fake quack*/ } } ///по аналогии - SwimStrategy, с соответствующими реализациями real и fake class Duck { private QuackStrategy quack; private SwimStrategy swim; Duck(QuackStrategy _quack, SwimStrategy _swim) { this.quack = _quack; this.swim = _swim; } doQuack() { this.quack.doQuack(); } doSwim() { this.quack.doSwim(); } }

не автор, но вот правильный ответ

Google
Nikita
05.02.2017
16:46:39
верно

если не считать слишком обобщенного класса Strategy, который нафиг не нужен - ты был близок

Daniil
05.02.2017
16:47:23
Та хорош) Нужен единый предок

Nikita
05.02.2017
16:47:30
нет

Lends
05.02.2017
16:47:35
что-то вы от ангуляра отдалились... го лучше конкурс на самую большую директиву

Daniil
05.02.2017
16:47:38
Чтобы мог обращаться к методу act()

Nikita
05.02.2017
16:48:10
и зачем?

Daniil
05.02.2017
16:48:23
чтобы код красивее был

и все

по сути не нужен

Nikita
05.02.2017
16:48:33
красивее - когда читабельнее

а act слишком обобщенный

doQuack и doSwim понятнее

Daniil
05.02.2017
16:49:20
swimStrategy.act() - исчерпывающая информация

swimStrategy.doSwim() - все равное что mycomponent.component

:)

ну, короче, я бы так сделал. А правильно это или нет - дело второе

Vladimir
05.02.2017
16:50:44
Я тут покурить вышел, а потом залип на ерроры шарповские. Но вот: using System; public class Program { public static void Main(string[] args) { var duck = new Duck(new NativeCrackStrategy(), new FakeSwimStrategy()); duck.Crack(); duck.Swim(); } public interface ICrackStrategy { void Crack(); } public interface ISwimStrategy { void Swim(); } public class Duck { private ICrackStrategy _crackStrategy; private ISwimStrategy _swimStrategy; public Duck(ICrackStrategy crack, ISwimStrategy swim) { this._crackStrategy = crack; this._swimStrategy = swim; } public void Crack() { this._crackStrategy.Crack(); } public void Swim() { this._swimStrategy.Swim(); } } public class NativeCrackStrategy: ICrackStrategy { public void Crack() { Console.WriteLine("crack like a native"); } } public class FakeCrackStrategy: ICrackStrategy { public void Crack() { Console.WriteLine("crack like a fake"); } } public class NativeSwimStrategy: ISwimStrategy { public void Swim() { Console.WriteLine("swim like a native"); } } public class FakeSwimStrategy: ISwimStrategy { public void Swim() { Console.WriteLine("swim like a fake"); } } }

Google
Daniil
05.02.2017
16:51:33
Ну мда
Задачки чаще всего абсурдны

Vladimir
05.02.2017
16:51:38
swimStrategy.act() - исчерпывающая информация
Нихуя это не исчерпывающая информация, Этот класс должен был-бы называться тогда Action

Daniil
05.02.2017
16:51:43
и мало применимы к реальности

Vladimir
05.02.2017
16:52:17
и мало применимы к реальности
А еще наверн, repository мало применим к реальности:)

и фабрики

Daniil
05.02.2017
16:52:34
А еще наверн, repository мало применим к реальности:)
ты прям мне войну сегодня объявил, я смотрю

flymithra
05.02.2017
16:52:40
Писать класс для метода, т.е. метод-класс, что? По моему это противоречит ООП

Vladimir
05.02.2017
16:53:38
Писать класс для метода, т.е. метод-класс, что? По моему это противоречит ООП
Нет, в данном случае наша стратегия просто отвечает всего за одно действие

Nikita
05.02.2017
16:54:16
Писать класс для метода, т.е. метод-класс, что? По моему это противоречит ООП
не забывай, что у тебя сейчас задача такая простая что ответ - в одном классе с одним методом.

Vladimir
05.02.2017
16:55:34
Смотри, ты передаешь всего функцию

Nikita
05.02.2017
16:55:59
Писать класс для метода, т.е. метод-класс, что? По моему это противоречит ООП
а когда у тебя у каждой стратегии появляются собственные зависимости от каких-нибудь сторонних сервисов/библиотек - то это переопределение метода - будет мизерной частью реализации класса стратегии.

Daniil
05.02.2017
16:56:05
Я и говорю, что в реальности для реаизации подобного я бы не стал делать то же, что сделал для этой задачи. А не то что factory и т.п. не применимы к реальности, как решил передернуть Вадимир

Vladimir
05.02.2017
16:56:40
Что, если в нашей стратегии будет ветвление? И там уже одной функции не будет, стратегия будет нести в себе определенные свойства

flymithra
05.02.2017
16:56:42
Смотри, ты передаешь всего функцию
Я понял, как ты сделал, пояснять не нужно, это напоминает мне историю, где чувака в тестовом задании физбаз попросили написать, а он обучил нейронку

flymithra
05.02.2017
16:58:05
:D я просто писал пример, в которой одной функции будет недостаточно
Правда, ненавижу такие задачи, когда кажется, что нужно написать ответ в пару строк, а писать овермного. Но энивей спасибо за задачу с: Присылай еще

Vladimir
05.02.2017
16:58:07
Палка о двух концах, задача эта с собеседования. С одной стороны - хуйнем функцию и ок. А что если этот код надо будет поддерживать?

Google
Daniil
05.02.2017
16:58:46
KISS

Vladimir
05.02.2017
16:59:08
И если кандидат подумает об этом "если" - шанс на оффер выше

Если ты конечно не гребцом на галеру идешь

Daniil
05.02.2017
17:02:35
Кто-нибудь работал Angular2 + Firebase?

Lends
05.02.2017
17:03:21
а если всё время думать о "если", можно закончить в бесконечной premature optimisation

Daniil
05.02.2017
17:05:00
а если всё время думать о "если", можно закончить в бесконечной premature optimisation
+ Довольно вредная привычка у многих программистов все усложнять. Только тут не оптимизация, а по структуре. Сразу вспоминается принцип Keep it Simple Stupid.

Lends
05.02.2017
17:05:46
да я чисто вбросить... не читал даже о чём речь))

Vladimir
05.02.2017
17:06:18
а когда у тебя суровый прод

у которого еще 2 года развития впереди

Lends
05.02.2017
17:07:28
Просто ООП оно как бы по такой интерпрайз, когда у тебя есть ТЗ и оно не меняется.... один раз подумал, всё написал

Daniil
05.02.2017
17:07:32
лучше быть где-то посередине. Особенно если спек часто меняется

Lends
05.02.2017
17:07:40
а в реале очень часто всё и вся меняется

Lends
05.02.2017
17:08:17
и как не изворачивайся, есть шанс переписать то, что раньше казалось гениальным и гибким

Daniil
05.02.2017
17:08:34
Вывод - пока можешь - делай просто. Усложнить время будет

Lends
05.02.2017
17:08:52
так что частенько если это не core, особо заморачиваться не стоит

H
05.02.2017
19:33:26
Всем привет! Подскажите, плиз, как работать с BehaviorSubject? http://stackoverflow.com/questions/42055888/work-with-a-global-variable-initialized-via-behaviorsubject-angular2/42055905#42055905

Страница 177 из 179

Эта группа больше не существует Эта группа больше не существует