1

Я ищу рекомендации по наилучшему совместному использованию кода между несколькими проектами Visual Studio. Я борюсь с фундаментальной темой и пытаюсь получить некоторые идеи, чтобы преодолеть это.Правильная организация проекта и архитектура для обмена кодами в проектах Visual Studio/.NET

Мое решение имеет:

  • Несколько проектов веб-приложений
  • Несколько автономных проектов процесса, например, Windows Services и/или консольные приложения и/или Azure WebJobs

Пример из функциональных возможностей, которые является общим для всех проектов, является необходимость называть некоторые общие веб-службы или, например, необходимость читать и писать с Amazon S3.

Где я боюсь это: Очевидно, что код, который реализует общую функциональность, должен быть разбит сам по себе, например, в отдельном проекте библиотеки классов. Например, чтобы поговорить с S3, код должен знать мои учетные данные Amazon, конечные точки S3 и т. Д. - все это обычно хранится в файлах конфигурации приложения. Но мне не нравится идея размещения конфигурационных файлов в проектах библиотеки классов, поскольку они связывают с ними конкретную реализацию. Но чтобы не делать этого, я должен передать эту информацию из вызывающего проекта. Так, например, web.config веб-приложения и файлы app.config приложения консоли содержат эту информацию о соединении. При вызове кода S3 я бы предпочел передать эту конфигурационную информацию в общий код.

Однако это кажется yucky * для меня, и я не уверен, почему. Мне все еще кажется, что я «привязываю» код S3 (например) к определенному способу конфигурации, если это имеет смысл. Я не уверен, что мое чувство неправильное.

* Например, я могу иметь произвольное количество данных конфигурации, которые должны быть переданы в:

  • строки подключения
  • учетные данные для веб-служб
  • API конечных точек
  • Произвольные данные из настроек конфигурации моего приложения (которые потребуются некоторым из вызывающих абонентов, но другие не будут, поэтому много раз данные будут бесполезны, но я должен выполнить работу по передаче чего-либо)

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

Можете ли вы дать мне предложения по этому вопросу?

ответ

0

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

public class AmazonConfigSettings { 
    public string AWSkey { get; set; } 
    public string ApiEndpoint { get; set; } 
    ...... 
} 

Ваша подпись может затем всегда выглядеть следующим образом:

public MySharedClass(AmazonConfigSettings config) { .... } 

Даже если (когда) Amazon полностью реконструирует свои настройки веб-сервиса.

+0

Имеет смысл. Это сводит к минимуму требуемую работу, если все изменится. Думаю, в какой-то момент неизбежно, что вам придется менять подписи, если, например, вы добавили новую услугу.В любом случае, я полагаю, мне нужно преодолеть мое основное чувство жужжания, связанное с передачей информации о конфиге (будь то отдельные пармы или объекты конфигурации) - поскольку это кажется неизбежным. Вы согласны? – Robert

+0

Его гораздо меньше, чем встраивание различных конфигураций в общий код. –