Программная инженерия

Q & A для профессионалов, преподавателей и студентов, работающих в жизненном цикле разработки систем

4
окружающий контекст против внедрения конструктора
У меня много базовых классов, которым требуется ISessionContext базы данных, ILogManager для журнала и IService, используемый для связи с другими сервисами. Я хочу использовать внедрение зависимостей для этого класса, используемого всеми основными классами. У меня есть две возможные реализации. Базовый класс, который принимает IAmbientContext со всеми тремя классами или вводит …

5
Следуйте по пути, который я знаю, затем попытайтесь внедрить правильные методы кодирования или начните с хороших методов кодирования и попытайтесь придумать мой путь до конца?
Прежде всего, я хочу сказать, что я привык заниматься процедурным программированием как своим хобби - я пытаюсь выучить ООП на нескольких языках и понять теорию , но не практику. У меня есть pet-проект, который я хотел построить, в частности, на PHP с базой данных (не важно, какой именно). Моей главной …

1
Как применить некоторые концепции DDD к реальному коду? Конкретные вопросы внутри
Я изучал DDD, и в настоящее время я пытаюсь найти способ применить концепции в реальном коде. У меня около 10 лет опыта работы с N-ярусом, поэтому очень вероятно, что я борюсь за то, что моя ментальная модель слишком связана с этим дизайном. Я создал веб-приложение Asp.NET и начинаю с простого …

2
Правильный дизайн, чтобы избежать использования dynamic_cast?
После некоторых исследований я не могу найти простой пример решения проблемы, с которой я часто сталкиваюсь. Допустим, я хочу создать небольшое приложение, в котором я могу создавать Squares, Circles и другие фигуры, отображать их на экране, изменять их свойства после их выбора, а затем вычислять все их периметры. Я бы …

3
Ручное написание модульных тестов Proof By Example?
Мы знаем, что пишем JUnit тестов демонстрирует один конкретный путь через ваш код. Один из моих партнеров прокомментировал: Написание модульных тестов вручную - это Proof By Example . Он пришел из истории Haskell, который имеет такие инструменты, как Quickcheck и способность рассуждать о поведении программы с типами . Он подразумевал, …

2
Какие данные должны храниться как `Заявка`?
В ASP.Net Core я считаю Claimsавторизацию очень не конкретным методом. Мы можем добавить что угодно как ClaimTypeи ClaimValueпару; groups, firstname, фамилия, brithdate, canAccessThisURI, isEditor и т. д. Однако этот подход (хранение всего, что может быть сохранено как утверждения) создаст огромную таблицу утверждений, которая включает 50% данных моего приложения. Как хорошая …

1
Шаблоны не являются строительными блоками - поэтому я не должен создавать приложение на основе шаблонов MVC / MVP?
Я читал эту страницу о шаблонах проектирования и о том, как вы должны обращаться с ними при написании кода. Насколько я понимаю, в заголовке ссылки говорится: Шаблоны не являются строительными блоками. Если я правильно понимаю, это значит не использовать шаблон проектирования, пока это не имеет смысла, правильно? Не начинайте с …

4
Хорошая идея - иметь возможность использовать язык генератора, такой как «yield»?
PHP, C #, Python и, вероятно, некоторые другие языки имеют yieldключевое слово, которое используется для создания функций генератора. В PHP: http://php.net/manual/en/language.generators.syntax.php В Python: https://www.pythoncentral.io/python-generators-and-yield-keyword/ В C #: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/yield Я обеспокоен тем, что как языковая функция / средство yieldнарушает некоторые соглашения. Одним из них является то, что я бы назвал "уверенность". …

7
Обход правил у волшебников и воинов
В этой серии постов в блоге Эрик Липперт описывает проблему объектно-ориентированного проектирования на примере мастеров и воинов, где: abstract class Weapon { } sealed class Staff : Weapon { } sealed class Sword : Weapon { } abstract class Player { public Weapon Weapon { get; set; } } sealed …

7
Я делаю свои занятия слишком гранулированными? Как следует применять принцип единой ответственности?
Я пишу много кода, который включает в себя три основных шага. Получить данные откуда-то. Преобразуйте эти данные. Положите эти данные куда-нибудь. Я обычно заканчиваю тем, что использую три типа классов - вдохновленные их соответствующими шаблонами дизайна. Фабрики - построить объект из какого-то ресурса. Посредники - использовать фабрику, выполнить трансформацию, затем …

3
Шаблон C # для чистой обработки «свободных функций», избегая статических классов «вспомогательного пакета» в стиле Helper
Недавно я рассматривал несколько статических классов «вспомогательных пакетов» в стиле Хелпера, плавающих вокруг больших кодовых баз C #, с которыми я работаю, в основном, как следующий очень сжатый фрагмент: // Helpers.cs public static class Helpers { public static void DoSomething() {} public static void DoSomethingElse() {} } Конкретные методы, которые …

6
Если юнит-тесты охватывают только «функциональное» программное обеспечение
Мы используем StructureMap в новом проекте по разработке программного обеспечения. Один из членов команды реализовал модульный тест, который в основном проверяет конфигурацию контейнера StructureMap . Это делается следующим образом; Подсчитывает количество экземпляров сборок, настроенных для классов в нашем пространстве имен приложения. Определяет ожидаемые экземпляры на уровне класса Утверждает, что ожидаемые …

3
Запись в начале файла того, что вы знаете только в конце
Справочная информация: я пишу код микроконтроллера C для записи файла EBML. EBML похож на двоичный XML с вложенными элементами, но вместо начального и конечного тегов есть начальный идентификатор, длина, а затем данные. Я записываю это во внешнюю флэш-память в приложении с низким энергопотреблением, поэтому я бы хотел, чтобы доступ к …

4
DDD подход к базовым операциям CRUD в сложном доменно-ориентированном приложении
Моя компания переписывает наше веб-приложение с нуля. Это крупное приложение уровня предприятия со сложной областью в финансовой индустрии. Мы используем ORM (Entity Framework) для сохранения. По сути, половина наших приложений сосредоточена на сборе необработанных данных от пользователя, их хранении, а затем другая половина приложения, содержащая большую часть нашей реальной доменной …

4
Защита ввода пользователем регулярных выражений от атак
Мне известно об отказе в обслуживании регулярных выражений (ReDoS). Есть ли какой-нибудь разумный способ позволить пользователям создавать собственные регулярные выражения, гарантируя при этом, что они не отправляют экспоненциально медленный шаблон?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.