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

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

2
Лицензирование Ghostscript в коммерческом продукте
Мы изучаем перспективы использования Ghostscript в коммерческом продукте (настольное приложение Windows). Я читал об обходе лицензирования GS в целом, просто предлагая пользователям, что они могут загрузить и установить GS самостоятельно, чтобы улучшить их работу (программное обеспечение на самом деле работает и без него, но большинство пользователей хотели бы рендерить / …
19 licensing 

4
Программирование на основе событий: когда оно того стоит?
Хорошо, я знаю, что название этого вопроса почти идентично тому, когда я должен использовать программирование на основе событий? но ответы на этот вопрос не помогли мне решить, следует ли мне использовать события в конкретном случае, с которым я сталкиваюсь. Я разрабатываю небольшое приложение. Это простое приложение, и по большей части …

2
Анемичные доменные модели и внедрение доменных сервисов
Модель анемичного домена описана Мартином Фаулером как анти-шаблон в дизайне, управляемом доменом. Чтобы иметь бизнес-логику в доменных моделях, часто используются доменные службы. Но внедрение доменных служб в доменные модели считается вредным для Вона Вернона (см. «Внедрение доменного дизайна», стр. 387). На мой взгляд, эти мнения противоречивы, правда ли это? Как …

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

1
Является ли Akka устаревшим брокером сообщений JMS / AMQP? [закрыто]
Закрыто . Этот вопрос основан на мнении . В настоящее время не принимает ответы. Хотите улучшить этот вопрос? Обновите вопрос, чтобы ответить на него фактами и цитатами, отредактировав этот пост . Закрыто 4 года назад . На прошлой неделе я глубоко погрузился в документы Akka и, наконец, понял, что такое …

3
Реляционные базы данных и итеративная разработка
Во многих подходах к разработке программного обеспечения, таких как гибкие методологии, доменно-ориентированное проектирование и объектно-ориентированный анализ и проектирование, нам предлагается использовать один итеративный подход к разработке. Таким образом, мы не должны делать нашу модель предметной области в первый раз, когда мы начнем работать в проекте. Вместо этого, со временем мы …

3
Разумно ли возвращать потоки везде, где мы обычно возвращаем коллекции?
Разрабатывая мой API, который не привязан к какому-либо устаревшему коду, я часто нахожу себя пишущим методы, которые являются чисто конвейерными потоками и заканчиваются сбором результатов. Как этот: ImmutableSet<T> deriveSomethingMeaningfulFromPrivateState() { return myPrivateThingies.stream() .map(this::ownerOfThing) .map(Owner::socialStatus) .filter(SocialStatus::isHeAFineMatey) .collect(MyCustomCollectors.toImmutableSet()); } Теперь большинству клиентов этого класса обычно требуется Collection (в данном случае ImmutableSet) для …

3
Исключения - «что случилось» против «что делать»
Мы используем исключения, чтобы позволить потребителю кода обработать неожиданное поведение полезным способом. Обычно исключения строятся вокруг сценария «что случилось», например FileNotFound(мы не смогли найти указанный вами файл) или ZeroDivisionError(мы не смогли выполнить 1/0операцию). Что, если есть возможность указать ожидаемое поведение потребителя? Например, представьте, что у нас есть fetchресурс, который выполняет …
19 exceptions 

4
Как проверить, когда расположение данных слишком громоздко?
Я пишу парсер, и как часть этого, у меня есть Expanderкласс, который «расширяет» одно сложное утверждение в несколько простых операторов. Например, это расширило бы это: x = 2 + 3 * a в: tmp1 = 3 * a x = 2 + tmp1 Сейчас я думаю о том, как тестировать …


4
«Используйте карту вместо класса для представления данных» - Рич Хикки
В этом видео Рич Хикки , создатель Clojure, он советует использовать карту для представления данных вместо использования класса для их представления, как это сделано в Java. Я не понимаю, как это может быть лучше, так как как пользователь API может узнать, что такое ключи ввода, если они просто представлены в …
19 java  design  class  clojure  map 

4
Почему мы должны упоминать тип данных переменной в C
Обычно в C мы должны сообщать компьютеру тип данных в объявлении переменной. Например, в следующей программе я хочу вывести сумму двух чисел с плавающей запятой X и Y. #include<stdio.h> main() { float X=5.2; float Y=5.1; float Z; Z=Y+X; printf("%f",Z); } Мне пришлось сообщить компилятору тип переменной X. Разве компилятор не …

2
Когда использовать [Pure] в конструкторе?
Я изучаю контракты кода в .NET и пытаюсь понять идею чистых конструкторов. В коде договора документация говорится: Все методы, которые вызываются в контракте, должны быть чистыми; то есть они не должны обновлять никакое ранее существующее состояние. Чистый метод позволяет изменять объекты, которые были созданы после входа в чистый метод. И …

8
Нормально ли для программиста время от времени не иметь 100% ясности в отношении своего кода? [закрыто]
Закрыто . Этот вопрос основан на мнении . В настоящее время не принимает ответы. Хотите улучшить этот вопрос? Обновите вопрос, чтобы ответить на него фактами и цитатами, отредактировав этот пост . Закрыто 5 лет назад . Я не опытный программист, поэтому, может быть, поэтому, но я заметил, что всякий раз, …

1
Использование типов уникальности для реализации безопасного параллелизма
В течение некоторого времени меня интересовали типы уникальности как альтернативы монадам на чисто функциональных языках; К сожалению, это своего рода эзотерическая область исследований CS, и он-лайн ресурсы о программировании с уникальными типами очень редки. Совершенно очевидно, как типы уникальности могут использоваться для реализации структур данных с состоянием, таких как ссылки …

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