모듈화 ()가 큰 응용 프로그램으로 구성되어있을 수있는 모듈의 이름은 그 기능 단위의 집합으로 구성되어있습니다 시스템 설계하고있다. A module represents a set of related concerns.
모듈 관련 우려의 집합을 나타냅니다.
It can include a collection of related components, such as features, views, or business logic, and pieces of infrastructure, such as services for logging or authenticating users.
그것은, 로직 기능, 플레이, 또는 사업과 같은 관련 구성 요소의 컬렉션을 포함시킬 수 및 로깅 또는 사용자를 인증하는 서비스와 같은 인프라의 조각,.
Modules are independent of one another but can communicate with each other in a loosely coupled fashion.
모듈은 서로 독립적입니다하지만 각각 느슨하게 결합된 방식으로 서로 통신할 수있습니다.
A composite application exhibits modularity.
종합 응용 프로그램을 전시하고 모듈화. For example, consider an online banking program.
예를 들어, 온라인 뱅킹 프로그램을 고려해보십시오.
The user can access a variety of functions, such as transferring money between accounts, paying bills, and updating personal information from a single user interface (UI).
사용자는, 세금 계산서 등 다양한 기능의 계정 간의 자금 이동으로 액세스 할 수 있으며 단일 사용자 인터페이스 (UI)에서 개인 정보를 업데이 트했다.
However, behind the scenes, each of these functions is a discrete module.
그러나이 장면 뒤에, 각각의 이러한 기능의 개별 모듈입니다. These modules communicate with each other and with back-end systems such as database servers.
이러한 모듈은 서로를 다시 데이터베이스 서버와 통신할 - 엔드 시스템 등.
Application services integrate components within the different modules and handle the communication with the user.
응용 프로그램 서비스는 다른 모듈 내의 구성 요소를 통합하고 사용자와의 커뮤니케이 션을 처리합니다. The user sees an integrated view that looks like a single application.
사용자가 볼 수있는 통합 뷰가 하나의 응용 프로그램처럼 보인다.
Figure 1 illustrates a design of a composite application with multiple modules.
그림 1은 여러 개의 모듈을 가진 복합 애플 리케이션의 디자인을 보여줍니다.
모듈형 디자인을 선택하는 이유는?
The following scenarios describe why you might want to choose a modular design for your application:
다음 시나리오는 이유 때문에 당신이 애플 리케이션을위한 모듈형 디자인을 선택할 수있습니다 설명 :
- Simplified modules . 간체 모듈을 제공합니다. Properly defined modules have a high internal cohesion and loose coupling between modules.
- 제대로 정의된 모듈 높은 내부 응집력와 모듈 사이의 느슨한 결합.
- The coupling between the modules should be through well-defined interfaces.
- 이 모듈 사이의 결합을 통해 잘 - 정의된 인터페이스를해야한다.
- Developing and/or deploying modules independently. Modules can be developed, tested, and/or deployed on independent schedules when modules are developed in a loosely coupled way.
- 개발 / 또는 독립적으로 모듈을 배포합니다. 모듈, 테스트 및 개발 될 수있는 / 또는 독립적인 일정을 때 느슨하게 결합된 모듈 방식으로 개발에 배치했다. By doing this, you can do the following:
- 이렇게하면 다음 작업을 수행할 수있습니다 :
- You can independently version modules. 당신이 수있는 독립적 버전의 모듈을 제공합니다.
- You can develop and test modules in isolation. 당신이 개발할 수와 고립에 모듈을 테스트합니다.
- You can have modules developed by different teams. 당신은 다른 팀들에 의해 개발된 모듈을 가질 수있습니다.
- Loading modules from different locations .
- 서로 다른 위치에서로드 모듈. A Windows Presentation Foundation (WPF) application might retrieve modules from the Web, from the file system and/or from a database.
- 파일 시스템 및 데이터베이스 / 또는에서 윈도우 프리젠 테이션 파운데이션 (WPF) 응용 프로그램은 웹에서 모듈을 검색할 수도있다.
- A Silverlight application might load modules from different XAP files.
- 한 XAP 파일에서 실버 라이트 응용 프로그램을 다른 모듈을 로드할 수있습니다.
- However, most of the time, the modules come from one location;
- for example, there is a specific folder that contains the modules or they are in the same XAP file.
- 그러나, 대부분의 시간,이 모듈을 하나의 위치에서 온; 예를 들면, 그 모듈이 포함되어하거나 동일한 XAP 파일에있는 특정 폴더입니다.
- Minimizing download time . 다운로드 시간을 최소화했다.
- When the application is not on the user's local computer, you want to minimize the time required to download the modules. 때 응용 프로그램은 사용자의 로컬 컴퓨터에없는 경우, 당신의 모듈을 다운로드하는 데 필요한 시간을 최소화하기 위해 싶어요.
- To minimize the download time, only download modules that are required to start-up the application. 다운로드 시간을 최소화하기 위해, 그 시작에 - 응용 프로그램을 다운로드 모듈에만 필요합니다.
- The rest are loaded and initialized in the background or when they are required. 로드되고 나머지는 배경에서 초기화 또는 그들이 필요합니다.
- Minimizing application start-up time . 응용 프로그램을 시작할 - 시간을 최소화했다. To get part of the application running as fast as possible, only load and initialize the module(s) that are required to start the application. 모듈 (들)은 응용 프로그램을 시작하는 데 필요한 응용 프로그램을 최대한 빨리, 가능한 한 유일한로드 및 초기화를 실행의 일부를 얻으려면.
- Loading module s 로드 모듈 s based on rules . 규칙을 기반으로합니다. This allows you to only load modules that are applicable for a specific role. 이것은 특정 역할에 적용되는 전용 모듈을 로드할 수있습니다. An application might retrieve from a service the list of modules to load. 한 응용 프로그램 모듈의 목록을 검색할 수있는 서비스에서 로드할 수있습니다.
Designing a Modular System 모듈형 시스템 설계
When you develop in a modularized fashion, you structure the application into separate modules that can be individually developed, tested, and deployed by different teams. 패션 modularized 개발하면, 당신은 개별적으로 개발할 수있을 테스트를 별도의 모듈을, 그리고 다른 팀들에 의해 배치로 응용 프로그램을 구조했다. Modules can enforce separation of concerns by vertically partitioning the system and keeping a clean separation between the UI and business functionality. 모듈을 수직으로 시스템 파티션과 깔끔한 UI와 비즈니스 기능 사이의 분리를 유지하여 우려의 분리를 적용할 수있습니다. Not having modularity makes it difficult for the team to introduce new features and makes the system difficult to test and to deploy. 모듈화가 어려운 팀이 아니라 새로운 기능에 대한 소개를하고 시스템을 테스트하고 배포하기 어려워합니다.
The following are general guidelines for developing a modular system: 다음은 모듈러 시스템을 개발하기위한 일반적인 가이드라인은 무엇입니까 :
- Modules should be opaque to the rest of the system and initialized through a well-known interface. 모듈은 시스템의 나머지를 투과해야하며 잘 - 알려진 인터페이스를 통해 초기화.
- Modules should not directly reference one another or the application that loaded them. 모듈해야 하나의 직접적인 원인은 아니 참조하거나 그들 로드된 다른 응용 프로그램이있습니다.
- Modules should use loosely coupled techniques, such as shared services, to communicate with the application or with other modules, instead of communicating directly. 모듈을 공유하는 서비스와 같은 응용 프로그램이나 다른 모듈과 함께, 의사 소통의 직접 의사 소통을 대신 느슨하게 결합된 기법을 사용해야합니다.
- Modules should not be responsible for managing their dependencies. 모듈들의 의존성을 관리하기위한 책임을지지해서는 안된다. These dependencies should be provided externally, for example, through dependency injection. 이러한 종속성이 외부 의존성을 주입, 예를 들면,를 통해 제공되어야한다.
- Modules should not rely on static methods that can inhibit testability. 모듈 테스트 억제할 수 정적 방법에 의존해서는 안된다.
- Modules should support being added and removed from the system in a pluggable fashion. 추가되는 모듈을 지원해야하고 플러그 패션에서 시스템에서 제거됩니다.
When you design a modular system, consider the following steps: 모듈러 시스템을 설계하면, 다음 단계를 고려 :
- Define the goals for the modular design. 모듈러 설계를위한 목표를 정의합니다. As described earlier, there are several reasons why you might decide to implement a modular design for your application. 앞에서 설명한대로, 거기에 왜 당신의 애플 리케이션을위한 모듈식 설계를 시행하기로 결정 데는 몇 가지 이유가있다.
- Decide how you are going to partition your modules and define your module's responsibilities. 어떻게하면 모듈과 모듈의 책임을 정의하는 파티션에 갈 곳을 결정합니다. Each module should have a distinct set of responsibilities. 각 모듈의 책임은 별개의 설정이 있어야합니다. The most common approach is to partition your application so that each module has its own functional area, such as Customers or Orders. 가장 일반적인 접근 때문에 각 모듈은 고객이나 주문과 같은 기능 영역 자체가 귀하의 응용 프로그램 파티션을하는 것입니다. In this case, each module will consist of its own presentation layer, a business or domain layer, and a resource access layer. 이 경우에는 각 모듈은 자신의 프레 젠 테이션 레이어, 비즈니스 또는 도메인 계층 및 리소스에 액세스 레이어의 구성된다. Figure 2 illustrates an example where a module that addresses a specific functional area contains all these logical layers. 그림 2는 어디 모듈 주소가 특정 기능 영역에서 예를 설명이 논리적 레이어를 포함하고있습니다.
Figure 2 그림 2
Layered approach to module design 중층적인 접근 방식 설계 모듈There are other ways to approach the design of modules. 거기에 다른 모듈의 디자인에 접근하는 방법이있습니다. For example, if you want to make it easier to replace the UI of your application, it might make sense to place the presentation layer in one or more easy-to-replace modules. 만약 여러분의 애플 리케이션의 UI를 쉽게 대체할 수 있도록하고 싶지 예를 들어, 하나 이상의 프레 젠 테이션 레이어는 쉬운 곳으로 감각을 만들어 야지 - - 모듈을 대체할 수있습니다. If you want your application to support different resource-access strategies, another example might be to put your resource access layer in a separate module. 만약 당신이 다른 리소스 - 액세스 전략을 지원하는 응용 프로그램을 원하는 또 다른 예제는 별도의 모듈에서 귀하의 리소스에 액세스 레이어를 잠재울 수있습니다. By replacing the resource access layer module, you can have the application access a local database or a remote Web service. 리소스에 대한 액세스 레이어 모듈을 교체함으로써, 애플 리케이션 액세스, 로컬 데이터베이스 또는 원격 웹 서비스를 할 수있습니다.
- Define the communication patterns between the modules. 이 모듈 사이의 통신 패턴을 정의합니다.
Even though modules should have low coupling between each other, it is common for modules to communicate with each other. 비록 서로 모듈, 모듈에 대한 서로 간의 의사 소통을하는 것이 일반적입니다 낮은 커플링이 있어야합니다. There are several loosely coupled communication patterns, each with their own strengths. 몇 가지를 느슨하게 결합된 커뮤니케이션 패턴, 각자의 강점이있다. Typically, combinations of these patterns are used to create the resulting solution. 일반적으로 이러한 패턴의 조합 결과가 솔루션을 만드는 데 사용됩니다. The following are some of these patterns: 다음의 몇 가지 패턴의 위치 :
- Loosely coupled events . 느슨하게 결합된 이벤트. A module can broadcast that a certain event has occurred. 모듈을 특정 이벤트가 발생했습니다 방송하실 수있습니다. Other modules can subscribe to those events so they will be notified when the event occurs. 다른 모듈이 그 행사를 구독할 수 있도록 그들이 통보됩니다 이벤트가 발생할 때. Loosely coupled events are a lightweight manner of setting up communication between two modules; therefore, they are easily implemented. 느슨하게 결합된 이벤트를 두 모듈 간의 통신을 설정하는 방식의 경량; 그러므로, 그들은 쉽게 구현됩니다. However, a design that relies too heavily on events can become hard to maintain, especially if many events have to be orchestrated together to fulfill a single task. 그러나 디자인이 너무 무겁게 이벤트에 의존하고 유지하기 위해, 특히 다양한 이벤트가 함께하는 경우는 하나의 임무를 완수하기 위해 조율된 게 쉽지가 될 수있다. In that case, it might be better to consider a shared service. 그런 경우엔, 공유 서비스를 고려하는 것이 좋을 것입니다.
- Shared services . 공유 서비스를 제공합니다. A shared service is a class that can be accessed through a common interface. 공유 서비스는 일반적인 인터페이스를 통해 액세스할 수있는 클래스입니다. Typically, shared services are found in a shared assembly and provide system-wide services, such as authentication, logging, or configuration. 일반적으로 공유하는 서비스는 공유 어셈블리에서 발견하는 시스템을 제공하고 인증과 같은 - 넓은 서비스, 로깅, 또는 구성.
- Shared resources . 공유 자원. If you do not want modules to directly communicate with each other, you can also have them communicate indirectly through a shared resource, such as a database or a set of Web services. 만약 당신이 직접 서로 통신 모듈을 원하지 않으면, 당신도 그들을 간접적으로 공유 리소스를 통해, 데이터베이스 또는 웹 서비스의 설정 등과 같은 의사 소통을 할 수있습니다.
Team Development Using Modules 팀 개발을 사용하여 모듈
Modules have explicit boundaries, typically by subsystem or feature. 모듈, 서브 시스템 또는 기능은 일반적으로 명시적인 한계가있다. Having these boundaries makes it easier for separate teams to develop modules. 이러한 경계가 쉽게 모듈을 개발할 수 있도록 별도의 팀이있다. On large applications, teams may be organized by cross-cutting capabilities in addition to being organized by a specific subsystem or feature. 대형 응용 프로그램에서 크로스로 팀을 구성할 수있습니다 - 절삭 기능 이외에 특정 서브 시스템 또는 기능에 의해 조직되고있다. For example, there may be a team assigned to shared components of the application, such as the shell or the common infrastructure module. 예를 들어, 한 팀을 거기 응용 프로그램의 공유 구성 요소, 셸 또는 공통 인프라 모듈 등 할당될 수있습니다.
The following are the different teams developing the Stock Trader Reference Implementation, as illustrated in Figure 3: 다음은 다른 팀들은 주식 트레 이더 참조 구현을 개발,으로 그림 3에서 보여주고있습니다 :
- Infrastructure team . 인프라 팀. This team develops the core cross-cutting services used in the application and cross-module types and interfaces. 이 팀의 핵심 크로스 - 서비스는 응용 프로그램과 교차에 사용되는 - 모듈 유형과 인터페이스를 절단을 개발하고있습니다.
- Pos i tions team . 포지션 내가 팀을 참조하십시오. This team maintains the Positions and Buy/Sell functionality. 이 팀의 순위를 유지 관리 및 주문 / 기능을 매도했다.
- News team . 뉴스 팀. This team handles aggregating and displaying news. 이 팀은 합칩니다 핸들 및 뉴스를 표시합니다.
- UI team . UI를 팀. This team manages the shell and contains a set of graphic designers who set the overall appearance of the application. 이 팀은 껍질을 관리하고 응용 프로그램의 전체적인 모양을 설정 그래픽 디자이너의 세트가 포함되어있습니다. They work across each of the development teams. 그들은 각 팀들의 전체 개발 작업.
- Operation s team . 작전 팀. This team is responsible for managing and deploying modules to staging and production. 이 팀 관리 및 준비 및 생산에 모듈을 배포하기위한 책임이있다. They also manage the master module configuration files. 그들은 또한 모듈 구성 파일은 마스터를 관리할 수있습니다.
Figure 3 illustrates an example of a composite application's modules and associated teams. 그림 3은 응용 프로그램의 모듈과 관련된 종합 팀의 예를 보여줍니다.
'WPF' 카테고리의 다른 글
WCF 웹서비스를 이용한 데이터 바인딩 (0) | 2009.12.15 |
---|---|
ResizeGrip - Resizing (Mostly Custom) Windows (0) | 2009.12.15 |
SplashScreen 만들기 (0) | 2009.12.15 |
초간단 실버라이트 웹서비스 사용하기 (0) | 2009.06.30 |
컨테이너(Container) (0) | 2009.06.03 |
XML , RSS 기사받아오기 및 웹서비스로 다시 보내주기 (0) | 2009.05.29 |
실버라이트 초간단 ADO.NET Entity Data Model 만들기 (0) | 2009.05.29 |
IValueConverter 데이터 변환 (0) | 2009.05.28 |
INotifyPropertyChanged 변경알림 (0) | 2009.05.28 |
델리게이트(delegate)로 유저컨트롤 이벤트 케치하기 (0) | 2009.05.28 |