Xamarin.ios를 사용 하는 엔터프라이즈 응용 프로그램 패턴 전자책Enterprise Application Patterns using Xamarin.Forms eBook

조정 가능 하 고, 유지 관리 가능 하며, 테스트 가능한 Xamarin을 개발 하기 위한 아키텍처 지침. Forms enterprise 응용 프로그램Architectural guidance for developing adaptable, maintainable, and testable Xamarin.Forms enterprise applications

이 전자책는 느슨한 결합을 유지 하면서 MVVM (모델 뷰-ViewModel) 패턴, 종속성 주입, 탐색, 유효성 검사 및 구성 관리를 구현 하는 방법에 대 한 지침을 제공 합니다.This eBook provides guidance on how to implement the Model-View-ViewModel (MVVM) pattern, dependency injection, navigation, validation, and configuration management, while maintaining loose coupling. 또한 IdentityServer를 사용 하 여 인증 및 권한 부여를 수행 하 고, 컨테이너 화 된 마이크로 서비스에서 데이터에 액세스 하 고, 단위 테스트를 수행 하는 방법도 제공 됩니다.In addition, there's also guidance on performing authentication and authorization with IdentityServer, accessing data from containerized microservices, and unit testing.

서문Preface

이 장에서는 가이드의 목적과 범위 및 대상 사용자에 대해 설명 합니다.This chapter explains the purpose and scope of the guide, and who it's aimed at.

소개Introduction

엔터프라이즈 앱 개발자는 개발 중에 앱의 아키텍처를 변경할 수 있는 몇 가지 문제를 직면 하 고 있습니다.Developers of enterprise apps face several challenges that can alter the architecture of the app during development. 따라서 시간이 지남에 따라 앱을 수정 하거나 확장할 수 있도록 앱을 빌드하는 것이 중요 합니다.Therefore, it's important to build an app so that it can be modified or extended over time. 이러한 적응성 설계는 어려울 수 있지만 일반적으로 앱에 쉽게 통합 될 수 있는 느슨하게 결합 된 개별 구성 요소로 앱을 분할 해야 합니다.Designing for such adaptability can be difficult, but typically involves partitioning an app into discrete, loosely coupled components that can be easily integrated together into an app.

MVVMMVVM

MVVM (모델-뷰-ViewModel) 패턴은 응용 프로그램의 비즈니스 및 프레젠테이션 논리를 UI (사용자 인터페이스)와 완전히 분리 하는 데 도움이 됩니다.The Model-View-ViewModel (MVVM) pattern helps to cleanly separate the business and presentation logic of an application from its user interface (UI). 응용 프로그램 논리와 UI를 명확 하 게 분리 하면 수많은 개발 문제를 해결 하 고 응용 프로그램을 더 쉽게 테스트 하 고 유지 관리 하 고 진화 시킬 수 있습니다.Maintaining a clean separation between application logic and the UI helps to address numerous development issues and can make an application easier to test, maintain, and evolve. 또한 코드 다시 사용 기회를 크게 향상 시킬 수 있으며, 개발자와 UI 디자이너는 앱의 각 부분을 개발할 때 더 쉽게 공동 작업을 수행할 수 있습니다.It can also greatly improve code re-use opportunities and allows developers and UI designers to more easily collaborate when developing their respective parts of an app.

종속성 주입Dependency Injection

종속성 주입을 통해 이러한 형식에 종속 된 코드에서 구체적인 형식을 분리할 수 있습니다.Dependency injection enables decoupling of concrete types from the code that depends on these types. 일반적으로 인터페이스와 추상 형식 간의 등록 및 매핑 목록과 이러한 형식을 구현 하거나 확장 하는 구체적인 형식을 포함 하는 컨테이너를 사용 합니다.It typically uses a container that holds a list of registrations and mappings between interfaces and abstract types, and the concrete types that implement or extend these types.

종속성 주입 컨테이너를 사용 하면 클래스 인스턴스를 인스턴스화하고 컨테이너의 구성에 따라 수명을 관리 하는 기능을 제공 하 여 개체 간의 결합을 줄일 수 있습니다.Dependency injection containers reduce the coupling between objects by providing a facility to instantiate class instances and manage their lifetime based on the configuration of the container. 개체를 만드는 동안 컨테이너는 개체에 필요한 모든 종속성을 삽입 합니다.During the objects creation, the container injects any dependencies that the object requires into it. 이러한 종속성을 아직 만들지 않은 경우 컨테이너는 먼저 종속성을 만들고 확인 합니다.If those dependencies have not yet been created, the container creates and resolves their dependencies first.

느슨하게 결합된 구성 요소 간 통신Communicating Between Loosely Coupled Components

Xamarin.Forms MessagingCenter 클래스는 게시-구독 패턴을 구현하여 개체 및 형식 참조로 연결하기 불편한 구성 요소 사이의 메시지 기반 통신을 허용합니다.The Xamarin.Forms MessagingCenter class implements the publish-subscribe pattern, allowing message-based communication between components that are inconvenient to link by object and type references. 이 메커니즘을 통해 게시자와 구독자는 서로에 대 한 참조 없이 통신할 수 있으며, 구성 요소 간의 종속성을 줄이고 구성 요소를 독립적으로 개발 하 고 테스트할 수 있습니다.This mechanism allows publishers and subscribers to communicate without having a reference to each other, helping to reduce dependencies between components, while also allowing components to be independently developed and tested.

Xamarin에는 내부 논리 기반 상태 변경으로 인해 일반적으로 사용자가 UI와 상호 작용 하거나 앱 자체에서 발생 하는 페이지 탐색에 대 한 지원이 포함 됩니다.Xamarin.Forms includes support for page navigation, which typically results from the user's interaction with the UI, or from the app itself, as a result of internal logic-driven state changes. 그러나 MVVM 패턴을 사용 하는 앱에서 탐색을 구현 하는 것은 복잡할 수 있습니다.However, navigation can be complex to implement in apps that use the MVVM pattern.

이 장에서는 모델 NavigationService 보기에서 모델을 처음 탐색할 때 사용 되는 클래스를 제공 합니다.This chapter presents a NavigationService class, which is used to perform view model-first navigation from view models. 뷰 모델 클래스에 탐색 논리를 배치 하면 자동화 된 테스트를 통해 논리를 수행할 수 있습니다.Placing navigation logic in view model classes means that the logic can be exercised through automated tests. 또한 뷰 모델은 특정 비즈니스 규칙이 적용 되도록 탐색을 제어 하는 논리를 구현할 수 있습니다.In addition, the view model can then implement logic to control navigation to ensure that certain business rules are enforced.

유효성 검사Validation

사용자의 입력을 허용 하는 모든 앱은 입력이 올바른지 확인 해야 합니다.Any app that accepts input from users should ensure that the input is valid. 유효성 검사를 수행 하지 않으면 사용자가 응용 프로그램 실패를 유발 하는 데이터를 제공할 수 있습니다.Without validation, a user can supply data that causes the app to fail. 유효성 검사는 비즈니스 규칙을 적용 하 고 공격자가 악성 데이터를 삽입 하는 것을 방지 합니다.Validation enforces business rules, and prevents an attacker from injecting malicious data.

MVVM (모델-뷰-ViewModel) 패턴의 컨텍스트에서는 사용자가 수정할 수 있도록 데이터 유효성 검사를 수행 하 고 뷰에 유효성 검사 오류를 알리기 위해 뷰 모델 또는 모델이 종종 필요 합니다.In the context of the Model-View-ViewModel (MVVM) pattern, a view model or model will often be required to perform data validation and signal any validation errors to the view so that the user can correct them.

구성 관리Configuration Management

설정을 사용 하면 응용 프로그램의 동작을 구성 하는 데이터를 분리 하 여 앱을 다시 빌드하지 않고도 동작을 변경할 수 있습니다.Settings allow the separation of data that configures the behavior of an app from the code, allowing the behavior to be changed without rebuilding the app. 앱 설정은 앱에서 만들고 관리 하는 데이터 이며, 사용자 설정은 앱의 동작에 영향을 주는 앱의 사용자 지정 가능한 설정 이며 자주 다시 조정할 필요가 없습니다.App settings are data that an app creates and manages, and user settings are the customizable settings of an app that affect the behavior of the app and don't require frequent re-adjustment.

컨테이너화된 마이크로 서비스Containerized Microservices

마이크로 서비스는 최신 클라우드 응용 프로그램의 민첩성, 확장성 및 안정성 요구 사항에 적합 한 응용 프로그램 개발 및 배포에 대 한 접근 방식을 제공 합니다.Microservices offer an approach to application development and deployment that's suited to the agility, scale, and reliability requirements of modern cloud applications. 마이크로 서비스의 주요 이점 중 하나는 독립적으로 확장 될 수 있다는 것입니다. 즉, 필요에 따라의 영역을 불필요 하 게 확장 하지 않고도 요구를 지원 하기 위해 더 많은 처리 능력과 네트워크 대역폭이 필요한 특정 기능 영역을 확장할 수 있습니다. 요구가 증가 하지 않은 응용 프로그램입니다.One of the main advantages of microservices is that they can be scaled-out independently, which means that a specific functional area can be scaled that requires more processing power or network bandwidth to support demand, without unnecessarily scaling areas of the application that are not experiencing increased demand.

인증 및 권한 부여Authentication and Authorization

ASP.NET MVC 웹 응용 프로그램과 통신 하는 Xamarin. Forms 앱에 인증 및 권한 부여를 통합 하는 방법에는 여러 가지가 있습니다.There are many approaches to integrating authentication and authorization into a Xamarin.Forms app that communicates with an ASP.NET MVC web application. 여기서는 IdentityServer 4를 사용 하는 컨테이너 화 된 identity 마이크로 서비스를 사용 하 여 인증 및 권한 부여를 수행 합니다.Here, authentication and authorization are performed with a containerized identity microservice that uses IdentityServer 4. IdentityServer는 ASP.NET Core Id와 통합 되어 전달자 토큰 인증을 수행 하는 ASP.NET Core에 대 한 오픈 소스 Openid connect Connect 및 OAuth 2.0 프레임 워크입니다.IdentityServer is an open source OpenID Connect and OAuth 2.0 framework for ASP.NET Core that integrates with ASP.NET Core Identity to perform bearer token authentication.

원격 데이터에 액세스Accessing Remote Data

많은 최신 웹 기반 솔루션은 웹 서버에서 호스트 되는 웹 서비스를 사용 하 여 원격 클라이언트 응용 프로그램에 대 한 기능을 제공 합니다.Many modern web-based solutions make use of web services, hosted by web servers, to provide functionality for remote client applications. 웹 서비스에서 노출 하는 작업은 web API를 구성 하 고, 클라이언트 앱은 API에서 노출 하는 데이터 또는 작업이 구현 되는 방식을 몰라도 웹 API를 활용할 수 있어야 합니다.The operations that a web service exposes constitute a web API, and client apps should be able to utilize the web API without knowing how the data or operations that the API exposes are implemented.

단위 테스트Unit Testing

MVVM 응용 프로그램에서 모델을 테스트 하 고 모델을 확인 하는 것은 다른 클래스를 테스트 하는 것과 동일 하며, 동일한 도구와 기법을 사용할 수 있습니다.Testing models and view models from MVVM applications is identical to testing any other classes, and the same tools and techniques can be used. 그러나 모델 클래스를 모델링 하 고 보는 데 일반적으로 사용할 수 있는 몇 가지 패턴이 있습니다. 이러한 패턴은 특정 유닛 테스트 기법을 활용 합니다.However, there are some patterns that are typical to model and view model classes, that can benefit from specific unit testing techniques.

사용자 의견Feedback

이 프로젝트에는 질문을 게시 하 고 피드백을 제공할 수 있는 커뮤니티 사이트가 있습니다.This project has a community site, on which you can post questions, and provide feedback. 커뮤니티 사이트는 GitHub에 있습니다.The community site is located on GitHub. 또는 전자책에 대 한 피드백을에 dotnet-architecture-ebooks-feedback@service.microsoft.com전자 메일로 보낼 수 있습니다.Alternatively, feedback about the eBook can be emailed to dotnet-architecture-ebooks-feedback@service.microsoft.com.