Ответы пользователя по тегу ООП
  • Что значит инъецировать, а также создавать один класс от другого (паттерн MVP) в C#?

    @kttotto
    пофиг на чем писать
    1. Инъецирует, значит не создает экземпляр внутри себя (т.е. не делает new Service()), а принимает Service как параметр, чаще всего как параметр конструктора
    var service = new Service();
    var presenter = new Presenter(service);

    2. Да, это значит, что презентер должен создать внутри себя модель и вернуть ее для отображения. И в тексте не написано, что это view. Это две разные модели.
    Ответ написан
    Комментировать
  • Есть ли какие-либо недостатки у статических методов?

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

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

    Если возникает необходимость сделать статические методы с логикой посерьезней фильтра списка, например, доступ к БД, то есть пара вариантов в этом случае. Первый, сделать синглтон, если хотите, чтобы была одна точка входа для доступа к БД и Вы хотите эту точку и попытки получения данных из БД контролировать.
    Второй, это иньекция зависимостей и контейнеры для них, всевозможные IoC. В настройках IoC указываете, что выдавать единственный экземпляр и он по сути сам станет singlton, фабрика контейнера не будет на каждое обращение создавать новый экземпляр.

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

    @kttotto
    пофиг на чем писать
    Нет, не надо. Не нужно усложнят проект там где это не требуется.
    Есть правило первой пули: сначала Вы пишите максимально просто и только когда приходят первые изменения, которые требуют абстракции, тогда только Вы ее выделяете.
    Ответ написан
    2 комментария
  • Как привести словесный пример полиморфизма?

    @kttotto
    пофиг на чем писать
    Когда Вам нужно что-то записать, обычно берут листочек и ручку. А можно не ручку, можно карандаш, можно фломастер или перьевую ручку. Полиморфизм будет заключаться в том, что Вам нужен объект, которым можно что-то записать, а какой конкретно и как он реализует саму запись Вас не сильно беспокоит. Т.е. когда Вы скажите: "дай мне объект для записи", Вам можно будет подсунуть любой объект, который как абстракция будет является "перо".

    Когда Вы хотите спать, Вы говорите: "дай мне на что можно лечь". И можно будет лечь хоть на диван, хоть на кровать, хоть на кресло-кровать. Абстрактно это все будет "кровать", но реализацию будет иметь разную.

    Полиморфиз удобен когда например могут быть изменения, дополнения в коде. Тогда мы абстрагируемся от конкретной реализации, создаем абстрактный класс и в метод уже запрашиваем объект этого типа. А во время выполнения мы может подсунуть для выполнения объект любого другого типа, который будет отнаследован от этого абстрактного и будет иметь свою реализацию каких то методов. Так что да, это "динамическая смена реализации".
    Ответ написан
    Комментировать
  • Где обучиться программированию с#?

    @kttotto
    пофиг на чем писать
    Все индивидуально. Если базы в коде нет, то лучше курсы. Если на чем то уже писали, то книгами, роликами и форумами можно обойтись. Если курсы, то по моему мнению, лучше всего разжевано на itvdn, там три уровня - можно купить подписку, можно в качестве онлайн вебинаров. Но лучше найти единомышленников и вместе постигать все прелести совместного обучения, реализуя несложные задачки.
    Ответ написан
    Комментировать
  • Абстрактный класс с интерфейсом: обобщение или реализация?

    @kttotto
    пофиг на чем писать
    Об интерфейсе "знают" без всяких ухищрений. В любом случае пунктирная.
    Ответ написан
    Комментировать