воскресенье, 17 марта 2024 г.

Migration, NetFramework, NetCore

https://learn.microsoft.com/en-us/dotnet/core/porting/

https://www.reddit.com/r/dotnet/comments/15vp6zh/migrating_from_net_framework_48_to_net_core_in/?rdt=47453

https://www.evoketechnologies.com/blog/guidelines-for-migrating-from-net-framework-to-net-core/

https://stackoverflow.com/questions/65017865/migrate-net-framework-4-8-to-net-5

https://positiwise.com/blog/how-to-migrate-from-net-framework-to-net-core-a-detailed-guide

https://steven-giesel.com/blogPost/f531dded-44af-4341-871c-d54875877900

https://eluminoustechnologies.com/blog/convert-net-framework-to-net-core/

https://modlogix.com/blog/5-things-you-should-know-before-moving-an-app-from-net-framework-to-net-core/

Migrating a large application from .NET Framework 4.8 to .NET Core involves careful planning and execution. Given the complexity and scale of your application, directly migrating to .NET Core 8.0 might be the most efficient approach, especially considering the future-proofing aspect. Here's a structured approach based on the provided sources:

1. Assessment & Planning

    Evaluate the current application: Understand the application's architecture, dependencies, and third-party libraries. This step is crucial for identifying potential challenges during migration 45.

    Choose the target .NET Core version: As of the latest information, .NET Core has been succeeded by .NET 5 and later versions, including .NET 6 and .NET 7. .NET 8.0 is not yet released as of the last update. Therefore, you should choose the latest stable version of .NET Core or .NET 5/6/7, depending on your specific needs and compatibility requirements 45.

2. Setup the Development Environment

    Install the .NET Core SDK: Download and install the SDK for the target .NET Core version. This is essential for developing and testing your application on .NET Core 45.

3. Migrate Code & Dependencies

    Create new .NET Core projects: Start by creating new .NET Core projects for each of your solutions. This step involves transferring the code from your .NET Framework projects to the new .NET Core projects 45.

    Migrate NuGet Packages: Ensure that all NuGet packages used in your .NET Framework projects are compatible with .NET Core. You may need to find alternatives for packages that are not supported 45.

4. Migrate Your Data

    Data Access Layers: Review and update your data access layers to ensure compatibility with .NET Core. This might involve updating database connection strings, ORM configurations, and data access code 45.

5. Migrate .csproj File

    Update .csproj files: Migrate your .csproj files to the new format used by .NET Core. This step is crucial for ensuring that your projects are correctly configured for .NET Core 45.

6. Configure Your App for the New Platform

    Runtime Options: Configure your application to target the new .NET Core version by updating the runtimeOptions in your configuration file 5.

7. Testing & Deployment

    Testing: Thoroughly test your application to identify and fix any issues that arise during the migration process. This includes unit tests, integration tests, and manual testing 45.

    Deployment: Update your deployment scripts and processes to work with .NET Core. This might involve setting up continuous integration/continuous deployment (CI/CD) pipelines for .NET Core applications 45.

8. Monitoring & Maintenance

    Monitoring: After deployment, monitor your application for any performance or stability issues. This step is crucial for ensuring that the migration was successful and that your application is running smoothly on .NET Core 45.

Conclusion

Directly migrating to the latest stable version of .NET Core (or .NET 5/6/7) is recommended for a large application like yours. This approach not only ensures compatibility with future .NET Core versions but also allows you to leverage the latest features and performance improvements offered by .NET Core. Remember, the migration process requires careful planning, thorough testing, and possibly significant code refactoring. Consider engaging with a team of experienced .NET developers or consulting with a professional service to ensure a smooth transition.

Миграция большого приложения с .NET Framework 4.8 на .NET Core требует тщательного планирования и выполнения. Учитывая сложность и масштаб вашего приложения, прямой переход на .NET Core 8.0 может оказаться наиболее эффективным подходом, особенно с учетом перспективности. Вот структурированный подход, основанный на предоставленных источниках:

1. Оценка и планирование

     Оцените текущее приложение: изучите архитектуру приложения, зависимости и сторонние библиотеки. Этот шаг имеет решающее значение для выявления потенциальных проблем во время миграции 45.

     Выберите целевую версию .NET Core. Согласно последней информации, на смену .NET Core пришли .NET 5 и более поздние версии, включая .NET 6 и .NET 7. На момент последнего обновления .NET 8.0 еще не выпущена. Поэтому вам следует выбрать последнюю стабильную версию .NET Core или .NET 5/6/7, в зависимости от ваших конкретных потребностей и требований совместимости 45.

2. Настройка среды разработки

     Установите пакет SDK для .NET Core. Загрузите и установите SDK для целевой версии .NET Core. Это важно для разработки и тестирования вашего приложения на .NET Core 45.

3. Перенос кода и зависимостей

     Создайте новые проекты .NET Core. Начните с создания новых проектов .NET Core для каждого из ваших решений. Этот шаг включает перенос кода из ваших проектов .NET Framework в новые проекты .NET Core 45.

     Миграция пакетов NuGet. Убедитесь, что все пакеты NuGet, используемые в ваших проектах .NET Framework, совместимы с .NET Core. Возможно, вам придется найти альтернативы пакетам, которые не поддерживаются 45.

4. Перенесите ваши данные

     Уровни доступа к данным: просмотрите и обновите уровни доступа к данным, чтобы обеспечить совместимость с .NET Core. Это может включать обновление строк подключения к базе данных, конфигураций ORM и кода доступа к данным 45.

5. Перенос файла .csproj

     Обновите файлы .csproj: перенесите файлы .csproj в новый формат, используемый .NET Core. Этот шаг имеет решающее значение для обеспечения правильной настройки ваших проектов для .NET Core 45.

6. Настройте свое приложение для новой платформы.

     Параметры времени выполнения: настройте свое приложение для использования новой версии .NET Core, обновив runtimeOptions в файле конфигурации 5.

7. Тестирование и развертывание

     Тестирование. Тщательно протестируйте свое приложение, чтобы выявить и устранить любые проблемы, возникающие в процессе миграции. Сюда входят модульные тесты, интеграционные тесты и ручное тестирование45.

     Развертывание. Обновите сценарии и процессы развертывания для работы с .NET Core. Это может включать настройку конвейеров непрерывной интеграции/непрерывного развертывания (CI/CD) для приложений .NET Core 45.

8. Мониторинг и обслуживание

     Мониторинг. После развертывания отслеживайте свое приложение на предмет проблем с производительностью или стабильностью. Этот шаг имеет решающее значение для обеспечения успешной миграции и бесперебойной работы вашего приложения на .NET Core 45.

Заключение

Для такого большого приложения, как ваше, рекомендуется прямой переход на последнюю стабильную версию .NET Core (или .NET 5/6/7). Такой подход не только обеспечивает совместимость с будущими версиями .NET Core, но также позволяет использовать новейшие функции и улучшения производительности, предлагаемые .NET Core. Помните, что процесс миграции требует тщательного планирования, тщательного тестирования и, возможно, значительного рефакторинга кода. Рассмотрите возможность привлечения команды опытных разработчиков .NET или консультации с профессиональной службой, чтобы обеспечить плавный переход.


doubles

https://learn.microsoft.com/en-us/dotnet/api/system.double.equals?view=net-8.0

https://learn.microsoft.com/en-us/dotnet/api/system.double.compareto?view=net-8.0

https://softwareengineering.stackexchange.com/questions/133738/how-can-i-properly-compare-double-values-for-equality-in-a-unit-test

https://stackoverflow.com/questions/3420812/how-do-i-find-if-two-variables-are-approximately-equals

https://www.geeksforgeeks.org/double-compareto-method-in-c-sharp-with-examples/

https://softwareengineering.stackexchange.com/questions/418182/which-is-preferred-subclass-double-or-create-extension-methods-to-test-relativ

https://github.com/fluentassertions/fluentassertions/issues/101

This approach provides a flexible and reusable way to compare double values with a specified tolerance, which can be particularly useful in scenarios where precision is crucial, such as in scientific calculations or when dealing with very small differences that are practically significant

Creating a class with a private property for tolerance and a method to compare two double values using this tolerance is a thoughtful approach, especially when there are many comparisons with the same tolerance. This decision aligns well with the principles of encapsulation and reusability in object-oriented programming (OOP).

Encapsulation is about bundling data and related operations into a single unit, or object, which helps in organizing code into logical units that represent real-world entities or concepts. This makes the code easier to understand and work with, as you can focus on the interface and behavior of each object rather than its internal implementation details 3. By encapsulating the tolerance value within a class, you ensure that the tolerance can only be modified through the class's methods, which can enforce any necessary business logic or validation. This approach also enhances code reuse by allowing the comparison logic to be reused across different parts of your application without duplicating the tolerance value 34.

Reusability is another key benefit of this approach. By encapsulating the comparison logic within a class, you can easily reuse this logic in different parts of your application without having to rewrite the same code multiple times. This not only saves time but also reduces the risk of errors and inconsistencies in your code 4.

Moreover, this design choice aligns with the principles of modularity and flexibility in OOP. Encapsulating the tolerance value within a class makes your code more modular, as it separates the concerns of comparison logic and tolerance management. This separation of concerns makes your code easier to troubleshoot, collaborate on, and upgrade 4. Additionally, by encapsulating the tolerance value, you gain flexibility in adjusting the tolerance as needed without affecting the rest of your program.

In summary, creating a class with a private property for tolerance and a method to compare two double values using this tolerance is a sound decision that leverages the principles of encapsulation and reusability in OOP. It enhances code organization, readability, and maintainability, making it easier to manage and reuse comparison logic across your application.

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

Создание класса с частным свойством допуска и методом сравнения двух двойных значений с использованием этого допуска — продуманный подход, особенно когда имеется много сравнений с одним и тем же допуском. Это решение хорошо согласуется с принципами инкапсуляции и повторного использования в объектно-ориентированном программировании (ООП).

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

Возможность повторного использования — еще одно ключевое преимущество этого подхода. Инкапсулируя логику сравнения внутри класса, вы можете легко повторно использовать эту логику в разных частях вашего приложения без необходимости переписывать один и тот же код несколько раз. Это не только экономит время, но и снижает риск ошибок и несоответствий в вашем коде 4.

Более того, этот выбор дизайна соответствует принципам модульности и гибкости ООП. Инкапсуляция значения допуска внутри класса делает ваш код более модульным, поскольку разделяет задачи логики сравнения и управления допусками. Такое разделение задач упрощает поиск и устранение неисправностей вашего кода, совместную работу и обновление. 4. Кроме того, инкапсулируя значение допуска, вы получаете гибкость в настройке допуска по мере необходимости, не затрагивая остальную часть вашей программы.

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

среда, 13 марта 2024 г.

Event, Driven

https://github.com/microservices-demo/microservices-demo

https://github.com/dotnet-architecture/eShopOnWeb

https://github.com/microsoft/eShopOnContainers

https://github.com/EventStore/EventStore

https://github.com/EventuatePlatform/eventuate-tram-core


Clean vs Event

Clean Architecture
1. Сложность: Чистая архитектура может быть сложной для понимания и реализации, особенно для новичков.
2. Переоптимизация: Некоторые критики утверждают, что применение Чистой архитектуры может привести к переоптимизации, особенно в маленьких проектах.
3. Недостаток стандартов: Несмотря на популярность, Чистая архитектура не имеет официальных стандартов или руководств, что может затруднить ее применение.
4. Сложность интеграции: Интеграция различных слоев может быть сложной, особенно при работе с внешними системами или API.
5. Необходимость в обучении: Для эффективного использования Чистой архитектуры требуется глубокое понимание принципов и паттернов проектирования.

1. Высокая степень абстракции: Это может усложнить понимание и поддержку кода.
2. Необходимость в большом количестве кода: Для реализации Чистой архитектуры может потребоваться больше кода, чем для традиционных подходов.
3. Сложность в настройке: Настройка и конфигурация различных слоев может быть сложной задачей.
4. Потенциальная избыточность: В некоторых случаях, использование Чистой архитектуры может привести к избыточности кода.
Clean Architecture vs Event-Driven (EDA)
-разные цели
-разные преимущества
Зависит от конкретных требований проекта.

Clean Architecture
1. Когда требуется высокая степень гибкости и масштабируемости. 2. Когда проект имеет сложную бизнес-логику, требующую четкого разделения ответственности. 3. Когда важна поддерживаемость и легкость тестирования кода. Event-Driven архитектура: 1. Когда проект требует асинхронной обработки событий, например, в системах обработки транзакций или в системах, где события генерируются в реальном времени. 2. Когда важна отказоустойчивость и масштабируемость, особенно в распределенных системах. 3. Когда требуется легкое расширение и интеграция с другими системами через события. Выбор Clean Architecture
vs Event-Driven зависит от специфики проекта,
требований к производительности,
масштабируемости и гибкости.
Возможна комбинация для создания гибкой и масштабируемой системы.