Я ищу рекомендации по наилучшему совместному использованию кода между несколькими проектами Visual Studio. Я борюсь с фундаментальной темой и пытаюсь получить некоторые идеи, чтобы преодолеть это.Правильная организация проекта и архитектура для обмена кодами в проектах Visual Studio/.NET
Мое решение имеет:
- Несколько проектов веб-приложений
- Несколько автономных проектов процесса, например, Windows Services и/или консольные приложения и/или Azure WebJobs
Пример из функциональных возможностей, которые является общим для всех проектов, является необходимость называть некоторые общие веб-службы или, например, необходимость читать и писать с Amazon S3.
Где я боюсь это: Очевидно, что код, который реализует общую функциональность, должен быть разбит сам по себе, например, в отдельном проекте библиотеки классов. Например, чтобы поговорить с S3, код должен знать мои учетные данные Amazon, конечные точки S3 и т. Д. - все это обычно хранится в файлах конфигурации приложения. Но мне не нравится идея размещения конфигурационных файлов в проектах библиотеки классов, поскольку они связывают с ними конкретную реализацию. Но чтобы не делать этого, я должен передать эту информацию из вызывающего проекта. Так, например, web.config веб-приложения и файлы app.config приложения консоли содержат эту информацию о соединении. При вызове кода S3 я бы предпочел передать эту конфигурационную информацию в общий код.
Однако это кажется yucky * для меня, и я не уверен, почему. Мне все еще кажется, что я «привязываю» код S3 (например) к определенному способу конфигурации, если это имеет смысл. Я не уверен, что мое чувство неправильное.
* Например, я могу иметь произвольное количество данных конфигурации, которые должны быть переданы в:
- строки подключения
- учетные данные для веб-служб
- API конечных точек
- Произвольные данные из настроек конфигурации моего приложения (которые потребуются некоторым из вызывающих абонентов, но другие не будут, поэтому много раз данные будут бесполезны, но я должен выполнить работу по передаче чего-либо)
Итак, каждый раз, когда я добавлял конфигурационную переменную в основное приложение, мне пришлось бы изменить конструктор общего кода. Вещи будут в постоянном движении.
Можете ли вы дать мне предложения по этому вопросу?
Имеет смысл. Это сводит к минимуму требуемую работу, если все изменится. Думаю, в какой-то момент неизбежно, что вам придется менять подписи, если, например, вы добавили новую услугу.В любом случае, я полагаю, мне нужно преодолеть мое основное чувство жужжания, связанное с передачей информации о конфиге (будь то отдельные пармы или объекты конфигурации) - поскольку это кажется неизбежным. Вы согласны? – Robert
Его гораздо меньше, чем встраивание различных конфигураций в общий код. –