Введение в разработку приложений предприятияIntroduction to Enterprise App Development

Вне зависимости от платформы разработчики корпоративных приложений сталкиваются с рядом трудностей:Regardless of platform, developers of enterprise apps face several challenges:

  • Требования к приложениям, которые могут изменяться со временем.App requirements that can change over time.
  • Новые деловые возможности и задачи.New business opportunities and challenges.
  • Процессе сбора во время разработки может значительно повлиять на объем и требования приложения.Ongoing feedback during development that can significantly affect the scope and requirements of the app.

С этими в виду очень важно для создания приложений, которые можно легко изменить или расширенных со временем.With these in mind, it's important to build apps that can be easily modified or extended over time. Проектирование для таких адаптируемости может быть затруднено, так как требует архитектуру, которая позволяет каждой отдельной части приложения, чтобы независимо друг от друга и тестировать отдельно не затрагивая остальные приложения.Designing for such adaptability can be difficult as it requires an architecture that allows individual parts of the app to be independently developed and tested in isolation without affecting the rest of the app.

Многие корпоративные приложения, достаточно сложны, чтобы требовать более одного разработчика.Many enterprise apps are sufficiently complex to require more than one developer. Может быть непростой задачей для решить, как разработать приложение таким образом, чтобы несколько разработчиков может эффективно работать с разными частями приложения независимо друг от друга, гарантируя, что элементы объединяются без проблем при интеграции в приложение.It can be a significant challenge to decide how to design an app so that multiple developers can work effectively on different pieces of the app independently, while ensuring that the pieces come together seamlessly when integrated into the app.

Традиционный подход к проектированию и созданию приложения результаты в том, что называется монолитных приложения, где компоненты тесно связана с не четкое разделение между ними.The traditional approach to designing and building an app results in what is referred to as a monolithic app, where components are tightly coupled with no clear separation between them. Как правило этот Монолитный подход может привести к приложений, которые сложно и неэффективным для поддержания, так как он может быть трудно устранять ошибки без нарушения других компонентов в приложении, и невозможно использовать для добавления новых функций или замены существующих функций.Typically, this monolithic approach leads to apps that are difficult and inefficient to maintain, because it can be difficult to resolve bugs without breaking other components in the app, and it can be difficult to add new features or to replace existing features.

Для разделения приложения на дискретные, слабо связанных компонентов, которые можно легко интегрировать друг с другом в приложение является эффективным средством для этих проблем.An effective remedy for these challenges is to partition an app into discrete, loosely coupled components that can be easily integrated together into an app. Такой подход обеспечивает несколько преимуществ:Such an approach offers several benefits:

  • Она позволяет отдельные функциональные возможности для разработки, тестирования, расширенных и обслуживается разным пользователям или командам.It allows individual functionality to be developed, tested, extended, and maintained by different individuals or teams.
  • Она обеспечивает повторное использование и четкое разделение ответственности между горизонтальной возможности приложения, такие как проверка подлинности и доступа к данным и по вертикали возможности, например приложения необходимые бизнес-функции.It promotes reuse and a clean separation of concerns between the app's horizontal capabilities, such as authentication and data access, and the vertical capabilities, such as app specific business functionality. Это позволяет, зависимости и взаимодействия между компонентами приложения, чтобы легче управлять.This allows the dependencies and interactions between app components to be more easily managed.
  • Это помогает поддерживать разделение ролей, позволяя разные люди или группы, сосредоточиться на конкретной задачи или части функциональных возможностей, в соответствии с их опыт.It helps maintain a separation of roles by allowing different individuals, or teams, to focus on a specific task or piece of functionality according to their expertise. В частности он предоставляет более четко отделить пользовательский интерфейс и бизнес-логику приложения.In particular, it provides a cleaner separation between the user interface and the app's business logic.

Тем не менее существует множество проблем, которые должны быть устранены при секционировании приложения в дискретные и слабо связанных компонентов.However, there are many issues that must be resolved when partitioning an app into discrete, loosely coupled components. Сюда входит следующее.These include:

  • Выбор способа предоставить четкое разделение ответственности между элементы управления пользовательского интерфейса и их логики.Deciding how to provide a clean separation of concerns between the user interface controls and their logic. Одним из важнейших решений при создании приложения Xamarin.Forms enterprise — это, следует ли размещать бизнес-логику в файлы с выделенным кодом, или для создания четкого разделения проблем, связанных элементов управления пользовательского интерфейса и свою логику, чтобы сделать приложение более простые поддержку и тестирование.One of the most important decisions when creating a Xamarin.Forms enterprise app is whether to place business logic in code-behind files, or whether to create a clean separation of concerns between the user interface controls and their logic, to make the app more maintainable and testable. Дополнительные сведения см. в разделе Model-View-ViewModel.For more information, see Model-View-ViewModel.
  • Определение, следует ли использовать контейнер внедрения зависимостей.Determining whether to use a dependency injection container. Контейнеры для введения зависимостей снижают зависимость взаимозависимость между объектами путем предоставления возможности для создания экземпляров классов с зависимостями, внедрять и управления временем их существования, в зависимости от конфигурации контейнера.Dependency injection containers reduce the dependency coupling between objects by providing a facility to construct instances of classes with their dependencies injected, and manage their lifetime based on the configuration of the container. Дополнительные сведения см. в разделе внедрения зависимостей.For more information, see Dependency Injection.
  • Выбор между регистрации событий, предоставленного платформой и слабо связанными обмена сообщениями между компонентами, которые было неудобно для связывания с ссылки на объект и тип.Choosing between platform provided eventing and loosely coupled message-based communication between components that are inconvenient to link by object and type references. Дополнительные сведения см. в разделе Введение взаимодействие между слабо связаны компоненты.For more information, see Introduction to Communicating Between Loosely Coupled Components.
  • Выбор способа переходить между страницами, включая способы вызова навигации, и где следует размещать логика перемещения.Deciding how to navigate between pages, including how to invoke navigation, and where navigation logic should reside. Дополнительные сведения см. в разделе Переходы.For more information, see Navigation.
  • Определяет, как проверить правильность введенных пользователем данных.Determining how to validate user input for correctness. Способы проверки пользовательского ввода и для уведомления пользователя об ошибках проверки, необходимо включить решение.The decision must include how to validate user input, and how to notify the user about validation errors. Дополнительные сведения см. в разделе проверки.For more information, see Validation.
  • Решить, как проводить проверку подлинности и защите ресурсов с авторизацией.Deciding how to perform authentication, and how to protect resources with authorization. Дополнительные сведения см. в разделе проверки подлинности и авторизации.For more information, see Authentication and Authorization.
  • Определяет, как получить доступ к удаленным данным из веб-служб, включая надежно извлечение данных и способ кэширования данных.Determining how to access remote data from web services, including how to reliably retrieve data, and how to cache data. Дополнительные сведения см. в разделе доступ к удаленным данным.For more information, see Accessing Remote Data.
  • Определение способа тестирования приложения.Deciding how to test the app. Дополнительные сведения см. в разделе Unit Testing.For more information, see Unit Testing.

В этом руководстве приведены инструкции по этих проблем и основных шаблонов и архитектуру для создания кросс платформенных корпоративного приложения с помощью Xamarin.Forms.This guide provides guidance on these issues, and focuses on the core patterns and architecture for building a cross-platform enterprise app using Xamarin.Forms. Цель — помочь сформировать код адаптируемых, поддерживаемых и проверяемых, адресация стандартные сценарии разработки приложений Xamarin.Forms enterprise и разделение задач презентации, логику представления и сущностей, благодаря поддержке рекомендации Шаблон Model-View-ViewModel (MVVM).The guidance aims to help to produce adaptable, maintainable, and testable code, by addressing common Xamarin.Forms enterprise app development scenarios, and by separating the concerns of presentation, presentation logic, and entities through support for the Model-View-ViewModel (MVVM) pattern.

Пример приложенияSample Application

Это руководство содержит пример приложения eShopOnContainers, который является Интернет-магазина, включает в себя следующие функциональные возможности.This guide includes a sample application, eShopOnContainers, that's an online store that includes the following functionality:

  • Аутентификация и авторизация в службе серверной части.Authenticating and authorizing against a backend service.
  • Просматривает каталог рубашек, кружек и других товаров.Browsing a catalog of shirts, coffee mugs, and other marketing items.
  • Фильтрация каталога.Filtering the catalog.
  • Сортировка элементов из каталога.Ordering items from the catalog.
  • Просмотр журнала заказа пользователя.Viewing the user's order history.
  • Настройка параметров.Configuration of settings.

Пример архитектуры приложенияSample Application Architecture

Рис. 1-1 общий обзор архитектуры примера приложения.Figure 1-1 provides a high-level overview of the architecture of the sample application.

Рис. 1-1: eShopOnContainers высокоуровневая архитектураFigure 1-1: eShopOnContainers high-level architecture

Пример приложения поставляется с тремя клиентскими приложениями:The sample application ships with three client apps:

  • MVC-приложениях, разработанных с помощью ASP.NET Core.An MVC application developed with ASP.NET Core.
  • Одностраничное приложение (SPA) разработаны с Angular 2 и Typescript.A Single Page Application (SPA) developed with Angular 2 and Typescript. Этот подход для веб-приложений позволяет избежать выполнения обращение к серверу с каждой операцией.This approach for web applications avoids performing a round-trip to the server with each operation.
  • Мобильного приложения, разработанные с помощью Xamarin.Forms, который поддерживает iOS, Android и универсальной платформы Windows (UWP).A mobile app developed with Xamarin.Forms, which supports iOS, Android, and the Universal Windows Platform (UWP).

Сведения о веб-приложений, см. в разделе проектирование и Разработка современных веб-приложений с ASP.NET Core и Microsoft Azure.For information about the web applications, see Architecting and Developing Modern Web Applications with ASP.NET Core and Microsoft Azure.

Образец приложения включает следующие службы серверной части:The sample application includes the following backend services:

  • Микрослужбы удостоверений использует удостоверение ASP.NET Core и IdentityServer.An identity microservice, which uses ASP.NET Core Identity and IdentityServer.
  • Микрослужба каталога, который является создание управляемых данными, чтение, обновление и удаление (CRUD) служба, которая использует базу данных SQL Server с использованием EntityFramework Core.A catalog microservice, which is a data-driven create, read, update, delete (CRUD) service that consumes an SQL Server database using EntityFramework Core.
  • Микрослужба заказов, которая является проблемно-службой, которая использует шаблоны проблемно ориентированного проектирования.An ordering microservice, which is a domain-driven service that uses domain-driven design patterns.
  • Микрослужба корзины, — службе CRUD на основе данных с использованием кэша Redis.A basket microservice, which is a data-driven CRUD service that uses Redis Cache.

Эти серверные службы реализуются как микрослужбы с помощью ASP.NET Core MVC и развертываются как контейнеры, уникальный в пределах одного узла Docker.These backend services are implemented as microservices using ASP.NET Core MVC, and are deployed as unique containers within a single Docker host. В совокупности эти серверные службы, называются приложения eshoponcontainers.Collectively, these backend services are referred to as the eShopOnContainers reference application. Клиентские приложения взаимодействуют с серверными службами через веб-интерфейс Representational State Transfer (REST).Client apps communicate with the backend services through a Representational State Transfer (REST) web interface. Дополнительные сведения о микрослужбах и Docker, см. в разделе контейнерных Микрослужб.For more information about microservices and Docker, see Containerized Microservices.

Сведения о реализации служб серверной части, см. в разделе Микрослужбы .NET: архитектура контейнерных приложений .NET.For information about the implementation of the backend services, see .NET Microservices: Architecture for Containerized .NET Applications.

Мобильное приложениеMobile App

В этом руководстве уделяется созданию корпоративных платформ приложений с помощью Xamarin.Forms, а в качестве примера используется мобильного приложения eShopOnContainers.This guide focuses on building cross-platform enterprise apps using Xamarin.Forms, and uses the eShopOnContainers mobile app as an example. Рис. 1-2 показаны страницы из мобильного приложения eShopOnContainers, которые предоставляют функциональные возможности, описанные ранее.Figure 1-2 shows the pages from the eShopOnContainers mobile app that provide the functionality outlined earlier.

Рис. 1-2: В мобильном приложении eShopOnContainersFigure 1-2: The eShopOnContainers mobile app

Мобильное приложение потребляет серверные службы, предоставляемые в образце приложения eShopOnContainers.The mobile app consumes the backend services provided by the eShopOnContainers reference application. Тем не менее его можно настроить для работы с данными из службы имитации для тех, кто хочет, чтобы предотвратить развертывание серверных служб.However, it can be configured to consume data from mock services for those who wish to avoid deploying the backend services.

Мобильное приложение eShopOnContainers использует следующие функциональные возможности Xamarin.Forms:The eShopOnContainers mobile app exercises the following Xamarin.Forms functionality:

  • XAMLXAML
  • Элементы управленияControls
  • ПривязкиBindings
  • Преобразователи типовConverters
  • СтилиStyles
  • АнимацииAnimations
  • КомандыCommands
  • поведенияBehaviors
  • ТриггерыTriggers
  • Произведенный эффектEffects
  • Пользовательские отрисовщикиCustom Renderers
  • MessagingCenterMessagingCenter
  • Пользовательские элементы управленияCustom Controls

Дополнительные сведения об этих возможностях см. в разделе документации Xamarin.Forms, и Создание мобильных приложений с помощью Xamarin.Forms.For more information about this functionality, see the Xamarin.Forms documentation, and Creating Mobile Apps with Xamarin.Forms.

Кроме того для некоторых классов в мобильном приложении eShopOnContainers, предоставляются модульных тестов.In addition, unit tests are provided for some of the classes in the eShopOnContainers mobile app.

Решение для мобильного приложенияMobile App Solution

Решения мобильного приложения eShopOnContainers организует исходного кода и других ресурсов в проекты.The eShopOnContainers mobile app solution organizes the source code and other resources into projects. Все проекты использовать папки для организации исходного кода и другие ресурсы по категориям.All of the projects use folders to organize the source code and other resources into categories. В следующей таблице приведены проекты, которые составляют мобильного приложения eShopOnContainers:The following table outlines the projects that make up the eShopOnContainers mobile app:

ПроектProject ОписаниеDescription
eShopOnContainers.CoreeShopOnContainers.Core Этот проект является проекта переносимой библиотеки классов (PCL), содержащий общий код и общий пользовательский Интерфейс.This project is the portable class library (PCL) project that contains the shared code and shared UI.
eShopOnContainers.DroideShopOnContainers.Droid Этот проект содержит код Android и представляет собой точку входа для приложения Android.This project holds Android specific code and is the entry point for the Android app.
eShopOnContainers.iOSeShopOnContainers.iOS Этот проект содержит код для iOS и представляет собой точку входа для приложения iOS.This project holds iOS specific code and is the entry point for the iOS app.
eShopOnContainers.UWPeShopOnContainers.UWP Этот проект содержит код для универсальной платформы Windows (UWP) и представляет собой точку входа для приложения Windows.This project holds Universal Windows Platform (UWP) specific code and is the entry point for the Windows app.
eShopOnContainers.TestRunner.DroideShopOnContainers.TestRunner.Droid Этот проект является средство выполнения тестов Android для проекта eShopOnContainers.UnitTests.This project is the Android test runner for the eShopOnContainers.UnitTests project.
eShopOnContainers.TestRunner.iOSeShopOnContainers.TestRunner.iOS Этот проект является средство запуска тестов iOS eShopOnContainers.UnitTests проекта.This project is the iOS test runner for the eShopOnContainers.UnitTests project.
eShopOnContainers.TestRunner.WindowseShopOnContainers.TestRunner.Windows Этот проект является средство выполнения тестов универсальной платформы Windows для проекта eShopOnContainers.UnitTests.This project is the Universal Windows Platform test runner for the eShopOnContainers.UnitTests project.
eShopOnContainers.UnitTestseShopOnContainers.UnitTests Этот проект содержит модульные тесты для проекта eShopOnContainers.Core.This project contains unit tests for the eShopOnContainers.Core project.

Классы из мобильного приложения eShopOnContainers, можно использовать повторно в любое приложение Xamarin.Forms с помощью практически без изменений.The classes from the eShopOnContainers mobile app can be re-used in any Xamarin.Forms app with little or no modification.

eShopOnContainers.Core проектаeShopOnContainers.Core Project

Проект переносимой библиотеки Классов eShopOnContainers.Core содержит следующие папки:The eShopOnContainers.Core PCL project contains the following folders:

ПапкаFolder ОписаниеDescription
АнимацииAnimations Содержит классы, позволяющие анимации для использования в XAML.Contains classes that enable animations to be consumed in XAML.
поведенияBehaviors Содержит поведения, которые доступны для просмотра классов.Contains behaviors that are exposed to view classes.
Элементы управленияControls Содержит пользовательские элементы управления, используемых в приложении.Contains custom controls used by the app.
Преобразователи типовConverters Содержит преобразователи значений, которые применяются пользовательскую логику к привязке.Contains value converters that apply custom logic to a binding.
Произведенный эффектEffects Содержит EntryLineColorEffect класс, который используется для изменения цвета границы конкретных Entry элементов управления.Contains the EntryLineColorEffect class, which is used to change the border color of specific Entry controls.
ИсключенияExceptions Содержит пользовательский ServiceAuthenticationException.Contains the custom ServiceAuthenticationException.
РасширенияExtensions Содержит методы расширения для VisualElement и IEnumerable классы.Contains extension methods for the VisualElement and IEnumerable classes.
Вспомогательные функцииHelpers Содержит вспомогательные классы для приложения.Contains helper classes for the app.
МоделиModels Классы модели для приложения.Contains the model classes for the app.
СвойстваProperties Содержит AssemblyInfo.cs, файл метаданных сборки .NET.Contains AssemblyInfo.cs, a .NET assembly metadata file.
СлужбыServices Содержит интерфейсы и классы, реализующие службы, предоставляемые в приложение.Contains interfaces and classes that implement services that are provided to the app.
ТриггерыTriggers Содержит BeginAnimation срабатывание триггера, который используется для вызова анимации в XAML.Contains the BeginAnimation trigger, which is used to invoke an animation in XAML.
ПроверкиValidations Содержит классы, используемые при проверке входных данных.Contains classes involved in validating data input.
Модели представленийViewModels Содержит логику приложения, который предоставляется на страницы.Contains the application logic that's exposed to pages.
ПредставленияViews Содержит страницы для приложения.Contains the pages for the app.
Проекты платформыPlatform Projects

Платформа проекты содержат реализации эффект, реализации пользовательского средства визуализации и другие ресурсы для конкретных платформ.The platform projects contain effect implementations, custom renderer implementations, and other platform-specific resources.

СводкаSummary

Средства разработки кросс платформенных мобильных приложений и платформ Xamarin сформировать комплексное решение для B2E, B2B и B2C мобильных клиентских приложений, предоставляя возможность совместного использования кода для всех целевых платформ (iOS, Android и Windows) и помочь снизить совокупную стоимость владения.Xamarin's cross-platform mobile app development tools and platforms provide a comprehensive solution for B2E, B2B, and B2C mobile client apps, providing the ability to share code across all target platforms (iOS, Android, and Windows) and helping to lower the total cost of ownership. Приложения могут совместно использовать их пользовательского интерфейса и приложение логики кода, при этом сохраняя собственной платформы внешний вид.Apps can share their user interface and app logic code, while retaining the native platform look and feel.

Разработчики корпоративных приложений сталкиваются с рядом трудностей, которые могут изменить архитектуру приложения во время разработки.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.