powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Design Patterns - Strategy
25 сообщений из 44, страница 1 из 2
Design Patterns - Strategy
    #39167779
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый,

Начал читать / смотреть видео по паттернам и ни где не могу найти ответ на свой вопрос.
Часто встречается пример с утками.
Вопрос как вывести список определенных уток в дата грид в зависимости от того, что что выбрано в неспадающем списке?
Куда впендюрить :) метод GetDucks ... нужен какой то дополнительный класс типа RepositoryDuck?


Пример с утками
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
using System;

namespace Duck
{

РЕАЛИЗАЦИЯ

    public class MiniDuckSimulator
    {
        public static void Main(string[] args)
        {
            Duck mallard = new MallardDuck();
            mallard.PerformQuack();
            mallard.PerformFly();
            Console.ReadLine();
        }
    }


    public abstract class Duck
    {
        private readonly IFlyBehavior flyBehavior;
        protected Duck(IFlyBehavior flyBehavior)
        {
            this.flyBehavior = flyBehavior;
        }

        public abstract void Display();

        public void PerformFly()
        {
            this.flyBehavior.Fly();
        }
        public void Swim()
        {
            Console.WriteLine("All ducks float, even decoys!");
        }
    }

    public interface IFlyBehavior
    {
        void Fly();
    }

    public class FlyWithWings : IFlyBehavior
    {
        public void Fly()
        {
            Console.WriteLine("I'm flying!");
        }
    }

    public class FlyNoWay : IFlyBehavior
    {
        public void Fly()
        {
            Console.WriteLine("I can't fly!");
        }
    }
    public class MallardDuck : Duck
    {
        public MallardDuck() : base(new FlyWithWings())
        {
        }

        public override void Display()
        {
            Console.WriteLine("I'm a real Mallard duck");
        }
    }

}


...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39167985
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G, а при чём тут шаблон Стратегия?
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39168025
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAАртем G, а при чём тут шаблон Стратегия?
хм, ну утки разные с разной реализацией ... значит рекомендуется инкапсулировать эту реализацию, поведение.

А теперь я создал 100 уток - разных видов.
Как организовать список этих уток? Как организовать запрос на выборку определенного типа из списка? Есть какой то для этого специальный шаблон?

-----------------------
PS Нашел шаблон Iterator. Его нужно использовать в данном случае?
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39168036
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G, generics Вам должен помочь, если T будет основополагающим типом для всех видов уток.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39168127
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AxeleronАртем G, generics Вам должен помочь, если T будет основополагающим типом для всех видов уток.
спасибо, почитаю.

А итераторы это совсем не из этой оперы? посмотрел вот это видео там выводят список меню.
А по поводу репозиториев ... через них такое возможно как-то правильно реализовать?

[spoiler] видео
YouTube Video
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39169590
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про generics почитал.

Вопрос немного вдругом. Как организовать так чтоб легко было вносить изменения.
Есть шаблон проектирования Repository есть Iterator.
Очень не хочется городить свой огород. До меня уже все придуманно и 100 раз испытанно. Таким образом ...
По моим ощущениям (вероятно непрваильным) шаблон Repository есть часть шаблона Iterator. Это так? или это небо и земля?
Что выбрать чтобы затем легко можно было вносить изменения?
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39169956
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Крутил вертел шаблон итератор, понял что нужен для того, когда нужно вывести однородные списки из разных источников
моя задача же просто вывести список ... здесь просто шаблон репозиторий.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39170003
Иммануил Кант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем GКрутил вертел шаблон итератор, понял что нужен для того, когда нужно вывести однородные списки из разных источников
моя задача же просто вывести список ... здесь просто шаблон репозиторий.

итератор - это для перечисления элементов некого множества (может быть совсем не список) в конструкции наподобие foreach . в C# это уже и так реализовано.
репозиторий - это вообще не шаблон, и уж подавно к спискам не имеет отношения
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39170008
Иммануил Кант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем GВопрос как вывести список определенных уток в дата грид в зависимости от того, что что выбрано в неспадающем списке?

вообще тут не надо ни с какими паттернами заморачиваться. берешь и делаешь.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39170122
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иммануил Кантитератор - это для перечисления элементов некого множества (может быть совсем не список) в конструкции наподобие foreach . в C# это уже и так реализовано.
Итератор - это паттерн последовательного доступа общими методами без учета нюансов реализации множества - здесь . Описан еще у GoF. В C# он реализован для ряда стандартных интерфейсов, но вполне может понадобиться сделать что-то своё.
Иммануил Кантрепозиторий - это вообще не шаблон
Да ну?
Иммануил Кантвообще тут не надо ни с какими паттернами заморачиваться. берешь и делаешь.
Ну да, по этой методологии даже книжки написаны: раз , два , три . Последняя - вообще супер-хит.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39170235
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Иммануил Кант,

Смысл и итератора и репозиториев теперь я понимаю. Выразился не правильно. По итераторам Ваше определение точнее.
По поводу репозиториев вы не правы - это шаблон проектирования.

По поводу просто делать - это больше к функциональному програмированию. Не подходит потому как нужны будут доработки. Условно каждые пол года что-то меняется, а все приложения писались до этого так, как вы предлагаете i=1 (утрирую). Что делать с ними сейчас не понятно ... расширяемость ноль, переписывать - это не вариант их сотня разной сложности ... люди которые писали за забором уже ...

Нужен грамотный подход, но тут время против играет ... книгами, видео, ссылками облажился ... года на 3 хватит при нормальном тайм менеджменте )))
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39170330
Иммануил Кант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем GПо поводу репозиториев вы не правы - это шаблон проектирования.

это такой же шаблон, как MVC, например. т.е. - архитектурный подход. есть у Вас есть расслоение на датасервисы, репозитории - то ок. если нет - на нет и суда нет. но конкретно к вашей задаче все это не имеет отношения.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39170332
Иммануил Кант
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны Да ну?

ну да.
если каждую оболочку для повышения уровня абстракции называть паттерном - им тогда счету не будет. хотя называть, конечно, можно.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39170971
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем GДень добрый,

Начал читать / смотреть видео по паттернам и ни где не могу найти ответ на свой вопрос.
Часто встречается пример с утками.
Вопрос как вывести список определенных уток в дата грид в зависимости от того, что что выбрано в неспадающем списке?
Куда впендюрить :) метод GetDucks ... нужен какой то дополнительный класс типа RepositoryDuck?


Пример с утками
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
using System;

namespace Duck
{

РЕАЛИЗАЦИЯ

    public class MiniDuckSimulator
    {
        public static void Main(string[] args)
        {
            Duck mallard = new MallardDuck();
            mallard.PerformQuack();
            mallard.PerformFly();
            Console.ReadLine();
        }
    }


    public abstract class Duck
    {
        private readonly IFlyBehavior flyBehavior;
        protected Duck(IFlyBehavior flyBehavior)
        {
            this.flyBehavior = flyBehavior;
        }

        public abstract void Display();

        public void PerformFly()
        {
            this.flyBehavior.Fly();
        }
        public void Swim()
        {
            Console.WriteLine("All ducks float, even decoys!");
        }
    }

    public interface IFlyBehavior
    {
        void Fly();
    }

    public class FlyWithWings : IFlyBehavior
    {
        public void Fly()
        {
            Console.WriteLine("I'm flying!");
        }
    }

    public class FlyNoWay : IFlyBehavior
    {
        public void Fly()
        {
            Console.WriteLine("I can't fly!");
        }
    }
    public class MallardDuck : Duck
    {
        public MallardDuck() : base(new FlyWithWings())
        {
        }

        public override void Display()
        {
            Console.WriteLine("I'm a real Mallard duck");
        }
    }

}




Иногда не стоит себе усложнять задачу. Попробуйте метод в Linq OfType<Type>

Думаю как раз в вашем случае конкретно подойдет.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39172277
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G,

Тебе пока рановато паттернами заморачиваться. А с опытом их основная ценность сведётся к помощи в общении с другим программистом и в нейминге.
Лучше изучи и постоянно думай о solid и подобных аббревиатурах.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39172340
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Артем G,

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

Denis.Лучше изучи и постоянно думай о solid и подобных аббревиатурах.SOLID - банальные следствия из ООП при отсутствии множественного наследования классов плюс глупый совет: "Принцип открытости/закрытости". Ознакомиться стоит, но зачем об этом постоянно думать?

зы: Лучше понимать принципы ООП, лежащие в основе шаблонов, чем учить шаблоны как таковые.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39172353
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

Спасибо за советы. Пытаюсь разобраться на собственных примерах. Цели заучить нет.
Паттерны помогают значительно улучшить качество кода.

Сейчас в одном из доставщихся в наследство приложений пытаюсь починить баг. Функция 5 тыс строк кода.
Читаемость нулевая ...
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39172549
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КС опытом приходит понимание того, что в языках существуют синонимы, использование которых для именования идентификаторов в программе никто не запрещал, использование которых никак не мешает в общении между программистами.
не понял мысль

Алексей КSOLID - банальные следствия из ООП при отсутствии множественного наследования классов плюс глупый совет: "Принцип открытости/закрытости". Ознакомиться стоит, но зачем об этом постоянно думать?

зы: Лучше понимать принципы ООП, лежащие в основе шаблонов, чем учить шаблоны как таковые.

опп банальное следствие попыток не думать о всем сразу и упрощать. Какая разница чего это следствие? Не понял мысль.
"принципы ООП, лежащие в основе шаблонов" - это по сути "solid и подобны аббревиатуры"

Нормальный совет. иногда и пузырьковая сортировка уместна. Все можно оспорить и поставить под сомнение. Только это никчему в данном топике

Постоянно думать - потому что я до боли часто встречаю разработчиков которые очень красиво рассказывают, но очень печально реализовывают. думаю это в том числе связно с тем, что когда дело доходит до реализации, они забывают все что знали и делают как им проще.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39173699
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Алексей КС опытом приходит понимание того, что в языках существуют синонимы, использование которых для именования идентификаторов в программе никто не запрещал, использование которых никак не мешает в общении между программистами.
не понял мысльНу ты предлагаешь именовать идентификаторы в программе строго как в паттернах, с целью упрощения общения между программистами: "А с опытом их основная ценность сведётся к помощи в общении с другим программистом и в нейминге".

Denis.Алексей КSOLID - банальные следствия из ООП при отсутствии множественного наследования классов плюс глупый совет: "Принцип открытости/закрытости". Ознакомиться стоит, но зачем об этом постоянно думать?

зы: Лучше понимать принципы ООП, лежащие в основе шаблонов, чем учить шаблоны как таковые.

опп банальное следствие попыток не думать о всем сразу и упрощать. Какая разница чего это следствие? Не понял мысль.
"принципы ООП, лежащие в основе шаблонов" - это по сути "solid и подобны аббревиатуры"Принципы ООП - это инкапсуляция, наследование и полиморфизм.

Denis.Постоянно думать - потому что я до боли часто встречаю разработчиков которые очень красиво рассказывают, но очень печально реализовывают. думаю это в том числе связно с тем, что когда дело доходит до реализации, они забывают все что знали и делают как им проще .А ты считаешь, что программист должен делать как ему сложнее?
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39174703
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

"ты предлагаешь именовать идентификаторы в программе строго как в паттернах" этого я нигде не писал и не имел ввиду.
"Принципы ООП - это инкапсуляция, наследование и полиморфизм." - это слишком базово. Очевидно ТС в курсе об этих понятиях, теперь он учится их правильно применять.
"А ты считаешь, что программист должен делать как ему сложнее? " - я считаю что зависит от ситуации, но в более менее серьёзных продуктах часто приходится делать как сложнее сначала, чтоб было как проще потом.
Вообще наш диалог превращается в словоблудие, ты же и сам прекрасно понимаешь что я имел ввиду.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39174876
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Алексей К,

"ты предлагаешь именовать идентификаторы в программе строго как в паттернах" этого я нигде не писал и не имел ввиду.
"... их основная ценность сведётся к помощи в общении с другим программистом и в нейминге" - а что это ещё может означать?
Denis."Принципы ООП - это инкапсуляция, наследование и полиморфизм." - это слишком базово. Очевидно ТС в курсе об этих понятиях, теперь он учится их правильно применять.И паттерны в этом очень помогут. Но когда ты уже всему научился, при написании своей программы нужно мыслить на уровне принципов ООП, а не на уровне комбинаторики паттернов.
Denis."А ты считаешь, что программист должен делать как ему сложнее? " - я считаю что зависит от ситуации, но в более менее серьёзных продуктах часто приходится делать как сложнее сначала, чтоб было как проще потом.В более менее сложных проектах требования к коду должны быть строго описаны в стандартах, принятых для данного проекта. Программист всегда делает как ему проще, но в рамках этих стандартов. Критерием качества кода должно являться соответствие кода этим стандартам, а не субъективная оценка текущего технического руководителя, оценивающего исходя из своих личных предпочтений.
Denis.Вообще наш диалог превращается в словоблудие, ты же и сам прекрасно понимаешь что я имел ввиду.Ну ты призвал вести разработку строго согласно паттернов, без права на творчество. Но спорить, конечно же, смысла нет - все имеют право на собственное мнение.
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39174899
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis.Вообще наш диалог превращается в словоблудие.+100500

заканчивайте
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39174955
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANADenis.Вообще наш диалог превращается в словоблудие.+100500

заканчивайтеТебе-то какое дело?
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39175315
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

Смысла отвечать не вижу. Все искажено, неверно и надумано.
Алексей К Ну ты призвал вести разработку строго согласно паттернов, без права на творчество
а это - слишком толсто
...
Рейтинг: 0 / 0
Design Patterns - Strategy
    #39175422
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
+100500

заканчивайтеТебе-то какое дело?Навыки фасилитатор прокачиваю, ёба :)
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Design Patterns - Strategy
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]