Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Никита Данилов «Имитация сложности»

Никита Данилов «Имитация сложности»

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

DotNetRu

March 31, 2018
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. 2 О себе Back-end .NET Developer 7 лет в EPAM

    Специализация: .NET, SOA, WCF, WebAPI, MS SQL, CI/CD Бизнес-область: Страхование (Авто, Туризма, всего) NIKITA DANILOV Lead Software Engineer
  2. 7 Сложное и Сложность? CBO (Coupling Between Classes), NOC (Number

    of Children), DIT (Depth of Inheritance), WMC (Weighted Methods per Class), LCOM (Lack of Cohesion of Methods), Complexity: Cyclomatic, Data, Decisional, Data Flow
  3. 8 Git IoC/DI NuGet Docker Chef Лямбды HTML LESS CSS

    Flex АЭС CRM Биржа Вклады Законы Логика ГОСТ Сети ISO Рефлексия RabbitMQ MongoDB PowerShell Шаблоны => ?. ?? Angular React ООП Люди Опционы Финансы Логистика Экология Заводы Физика Бизнес Химия Счета
  4. 15 Project.Contracts Facades Entities IItemFacade IUserFacade IItem IUser IValidatable Project.Facades

    Item User ItemFacade UserFacade Project.Web Controllers App_Start ItemController WebApiConfig FilterConfig Startup
  5. 20 Имитация сложности – подражание сложности. Подсмотренной в книгах или

    на конференциях. Чтобы выглядеть посложнее, солиднее, богаче, изучить новый подход, вдруг диплом не примут.
  6. 27 0,0001% * 10,000 SLOCs = 1% 1% * 100

    Зависимостей = 100%
  7. 28 3. Проще → Понятнее для Поддержки. Например: Абстракция для

    Упрощения = Моделирования? Абстракция для сокрытия Сложности?
  8. 31 class Controller { Controller(IManager, ILogger, ISettings) { … }

    Load() { … var data = _manager.Load(...); … } }
  9. 32 class Manager { Manager(IFacade, ILogger, IChecker, IWrapper) { …

    } Load() { … var data = _facade.Load(...); … } }
  10. 33 class Facade { Facade(IAccessor, ILogger, IPermission, IPhone) { …

    } Load() { … var data = _accessor.Load(...); … } }
  11. 34 class Accessor { Accessor() { } Load(...) { NLog.Instance.Write(…);

    var context = new DbContext("connectionString"); var data = context.Entities.ToList(); } }
  12. 40 «Всё следует упрощать до тех пор, пока это возможно,

    но не более того» Альберт Эйнштейн
  13. 42 Ссылки • Software: Managing the Complexity, https://medium.com/@gaperton/software-managing-the-complexity-caff5c4964cf • Keep

    It Simple Stupid (KISS), http://principles-wiki.net/principles:keep_it_simple_stupid • Основы теории надежности , Расчет показателей надежности невосстанавливаемых нерезервированных систем.