Задать вопрос
  • Как написать Dockerfile для asp.net приложения с такой архитектурой?

    @hello_my_name_is_dany
    Backend Developer (Node.js, PHP, C#)
    У вас проблема в зависимостях
    Даже по логу вам говорится:
    /app/server_app.Domain/Model/Queries/ProductCategoryCreateQuery.cs(3,17): error CS0234: The type or namespace name 'AspNetCore' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?) [/app/server_app.Domain/server_app.Domain.csproj]


    А конкретно проблема в этом
    server_app/server_app.Domain/server_app.Domain.csproj
    <ItemGroup>
            <Reference Include="FluentValidation">
                <HintPath>..\..\..\..\.nuget\packages\fluentvalidation\11.11.0\lib\net8.0\FluentValidation.dll</HintPath>
            </Reference>
            <Reference Include="Microsoft.AspNetCore.Http.Abstractions">
                <HintPath>..\..\..\..\.nuget\packages\microsoft.aspnetcore.app.ref\8.0.8\ref\net8.0\Microsoft.AspNetCore.Http.Abstractions.dll</HintPath>
            </Reference>
            <Reference Include="Microsoft.AspNetCore.Http.Features">
                <HintPath>..\..\..\..\.nuget\packages\microsoft.aspnetcore.app.ref\8.0.8\ref\net8.0\Microsoft.AspNetCore.Http.Features.dll</HintPath>
            </Reference>
            <Reference Include="Microsoft.AspNetCore.Mvc.Abstractions">
                <HintPath>..\..\..\..\.nuget\packages\microsoft.aspnetcore.app.ref\8.0.8\ref\net8.0\Microsoft.AspNetCore.Mvc.Abstractions.dll</HintPath>
            </Reference>
            <Reference Include="Microsoft.AspNetCore.Mvc.Core">
                <HintPath>..\..\..\..\.nuget\packages\microsoft.aspnetcore.app.ref\8.0.8\ref\net8.0\Microsoft.AspNetCore.Mvc.Core.dll</HintPath>
            </Reference>
            <Reference Include="Microsoft.IdentityModel.Tokens">
                <HintPath>..\..\..\..\.nuget\packages\microsoft.identitymodel.tokens\7.1.2\lib\net8.0\Microsoft.IdentityModel.Tokens.dll</HintPath>
            </Reference>
            <Reference Include="Npgsql.EntityFrameworkCore.PostgreSQL">
              <HintPath>..\..\..\..\.nuget\packages\npgsql.entityframeworkcore.postgresql\9.0.2\lib\net8.0\Npgsql.EntityFrameworkCore.PostgreSQL.dll</HintPath>
            </Reference>
        </ItemGroup>


    Вы буквально указали путь к конкретным dll на вашем компьютере, и из-за этого в докер они не попадают, а dotnet restore их просто игнорирует. Эти зависимости должны быть в общем списке, как в блоке ItemGroup ниже этого, но проблема на самом деле куда глобальнее.

    Как я понимаю, вы только изучаете DDD, и сделали самую фатальную ошибку в дизайне, Domain не должен отвечать за БД, JWT, модели, DTO и тд. Domain должен концентрировать именно бизнес-сущности и бизнес-логику (Entities & Buisness Services). Application слой уже отвечает за сценарии использования приложения (CQRS или Use Cases, которые оперируют сущностями/сервисами из Domain, а для инфраструктурных моментов использует интерфейсы - dependency inversion). Инфраструктурный слой реализует интерфейсы из Application слоя, например, репозитории бд, http-клиенты и тд, соответственно в нём концентрируется вся работа с БД и другими внешними сервисами. Presentation слой отвечает за представления, это может быть ASP.NET Core API. В таком случае, здесь уже используются модели, JWT, вызов Use Cases из слоя Application, в общем всё, что касается предоставления API.

    Это если очень коротко, тема довольно обширная и сложная.
    Советую вам почитать:
    Мартин Роберт - Чистая архитектура. Искусство разработки программного обеспечения
    Эрик Эванс - Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем

    Также именно для C# есть прекрасный пример проекта с использованием подходов CA и DDD, изучите его, необязательно делать всё под копирку, но полезным точно будет.

    Удачи Вам!
    Ответ написан
    1 комментарий
  • Как убрать сортировку в Gmail по категориям?

    @Rost3d
    Отключить в настройках "умные функции и персонализация
    6144a87c7e317480705471.jpegОтключить в
    Ответ написан
    Комментировать
  • Как верстать изогнутые секции?

    RAX7
    @RAX7
    SVG + 2 маски, одна пропорционально растягивается, другая непропорционально. Отрицательным margin загнать секции одна на другую.
    Ответ написан
    6 комментариев
  • Какие флексбокс сетки вы используете?

    alexfilus
    @alexfilus
    Senior backend developer
    Мне Foundation больше всего зашёл.
    Ответ написан
    Комментировать
  • Как правильно вносить изменения в проект ASP.NET?

    vladimirbondarev
    @vladimirbondarev
    Разработчик ПО
    Функция "Publish" в VS это всего лишь деталь поставки. Формируй пакет поставки и разворачивай его на FTP.
    Подмена файлов, будь то бинарных или текстовых плохая практика, можно что-нибудь отломать и потом долго мучиться восстанавливая предыдущие состояние. Каждая поставка содержит в себе изменения, значит должна быть присвоена версия, которая содержит определенный ченджлог, иначе через цать таких поставок начнется каша.

    Опишу общий процесс поставки:
    • вносятся финальные изменения в разработческой ветки, тестируются
    • сливаются изменения разработческой версии с master, исправляются конфликты, тестируются
    • собирается пакет поставки, содержащий все необходимые конфигурационные, бинарные и прочие файлы и т.д.. Пакет не должен содержать мусорных файлов. Присваивается пакету версия
    • поставляется пакет на демонстрационный сервер. Если есть БД, то восстанавливается бэкап с продуктовой, либо максимально приближенный к последнему состоянию оригинальной. Применяются миграции.
    • регистрируется приложение в IIS, тестируется
    • поставляете пакет на продуктовое окружение
    • если есть БД, то создается бэкап, применяются миграции
    • разворачиваете пакет поставки
    • переключаете IIS на использование поставленной версии

    Это процесс, к которому мы пришли не сразу. Были и подмена файлов на продакшене и живая правка кода. Иногда это приводило к плачевным последствиям. Потом итеративно выработалась ручная процедура поставки, после для экономии времени эта процедура автоматизировалась. Сейчас самый продолжительным участком поставки является ручное приемочное тестирование на демонстрационном окружении. Автоматизированные приемочные тесты тоже есть - они прогоняются после сборки билда, но как и весь код они могут содержать ошибки, поэтому ручной прогон приемочных тестов исключать не решаемся.
    Ответ написан
    3 комментария