低結合企業級システムアーキテクチャ設計
40947 ワード
http://www.ituring.com.cn/article/38836
低結合企業級システムアーキテクチャ設計
私たちはよくJavaEEまたは.Netが開発した製品を「システム」と呼びますが、モバイルプラットフォーム(主にAndroid、iOS、Window Phone)が開発した製品は「アプリケーション」です.「システム」は複雑で、アーキテクチャ設計が必要ですが、「応用」は比較的簡単です.これは構造問題を考える必要がないということですか?
まず、企業レベルのシステム構造設計について理解します.ソフトウェア設計の原則は、ソフトウェアシステムの「多重化可能性」と「拡張可能性」を向上させることであり、システムアーキテクチャ設計は階層分割方式を採用し、これらの階層の間は松結合であり、階層の内部は高凝集である.結合を低減することはソフトウェア設計の目標であり、低結合のシステムを設計できることは、我々のシステムが「多重化可能性」と「拡張可能性」を持つことを意味する.汎用低結合JavaEEおよび.Net企業レベルシステムアーキテクチャ図.
表示層は、ユーザとシステムが相互作用するコンポーネントのセットであり、ユーザは、この層を通してシステムに要求または命令を送信し、システムはこの層を通してユーザ要求または命令を受信し、その後、命令を消化吸収して次の層に呼び出し、呼び出しの結果をこの層に示す.表示層は軽薄であるべきで、業務ロジックを持つべきではない.
業務層はシステムの中核業務処理層であり、表示層の指令とデータを受信し、消化吸収後、組織業務ロジックの処理を行い、結果を表示層に返す.
データの永続層は、サービス層がデータベース層にアクセスするために使用され、設計仕様から結合度を低減するために、サービス層はデータベースにアクセスするコードを持つべきではなく、データベースにアクセスするコードはデータの恒久層に置くべきである.
情報システム層は、システムのデータソースであり、データベース、ファイル、レガシーシステムおよびネットワークデータであり得る.
移動プラットフォームの階層構造設計
モバイルプラットフォームのアプリケーションはバージョンを縮小するシステムであり、アーキテクチャの設計も必要であるが、すべてのアプリケーションは必ず汎用低結合企業レベルシステムアーキテクチャに基づくものではなく、一般的には主に情報処理に関連するアプリケーションがこのようなアーキテクチャ設計モードを使用する.iOSプラットフォーム一般情報処理アプリケーション階層アーキテクチャ設計図.
表示層は、iOSにおける表示層がUIKit Framewarkによって構成されており、私たちが前に勉強しているビュー、コントローラ、コントロール、およびイベント処理などの内容が含まれている.
業務ロジック層は、どのフレームを採用するかは具体的な業務によって決まりますが、一般的には一定の業務処理機能を持つObjective-CとC++パッケージの種類、またはCパッケージの関数です.
データの持続層は、ローカルまたはネットワークのデータアクセスを提供し、SQLiteデータAPI関数にアクセスするか、CoreData技術にアクセスするか、あるいはファイルにアクセスするNSFileManager、またはネットワーク通信などの技術を提供します.
情報システム層は、iOSについての情報源は、ローカルとネットワークに分けられている.ローカルデータはファイルに入れてもいいし、データベースに入れてもいいです.現在iOSローカルデータベースはSQLite 3を採用しています.ネットはあるクラウドサービスであってもいいし、一般的なWebサービスであってもいいです.
同じプロジェクトに基づく階層
構造は私たちのiPhoneとiPadの開発にとって現実的な意義を持っています.iOS(iPhoneとiPadの2つのプラットフォーム)に基づく「Myメモ」を作成する場合、メモを追加、削除、検索するための基本的な機能を備えています.「メモ」アプリケーションの用例図は、階層的に設計した上で、iPhone版とiPad版が異なっています.業務ロジック層、データ持久層、情報システム層は共用できます.これは私たちの仕事量を大幅に減らすことができます.
iOSはiPhoneとiPadの二つのプラットフォームを考慮して、デザインのプロトタイプのスケッチ、iPhoneバージョンの「Myメモ」を作成しました.iPad版の「Myメモ」の横画面デザインのプロトタイプのスケッチ、iPad版の「Myメモ」の縦画面デザインのプロトタイプのスケッチ.
iOSプラットフォームの階層化の具体的な方法には、同じ工程に基づいて階層化され、作業空間に基づいて異なる工程の階層化と静的リンクライブラリの階層化がある.この小節は同じ工程に基づく階層を紹介する.
前の文では、適応iPhoneとiPadを構築するプロジェクトを紹介しました.つまり、私たちが今話しているのは同じプロジェクトに基づく階層モデルです.「覚書」の応用コードを読んでください.実現過程はここで紹介しないで、「MyNotes」プロジェクトを開けてください.Xcodeプロジェクトのナビゲーションパネルには3つのグループがあります.Presentation Layer、Business LogicLayerとPersistencLayer.この3つのグループを作成する目的は、それぞれの階層の中のクラスを対応するグループに配置して管理しやすくすることであり、Presentation Layerは、配置された表示層相関クラスであり、Business LogicLayerは配置されたトラフィック論理層の関連クラスであり、PersistensceLayerは、恒久層の配置関連クラスである.
各階の下はどう分けますか?ビジネスモジュールによって分けられます.コンポーネントの機能によって分けられます.本アプリケーションではPersistensceLayer層はdaoとdomainの二つのグループに分けられます.daoはデータにアクセスするCRUDの4つの方法があり、結合度を下げるためにdaoは一般的にプロトコル(またはJavaインターフェース)として設計され、異なるデータソースによって異なる実施形態が採用されます.domainグループは実体類で、実体は応用中の「人」、「事」、「物」などです.
daoグループのNoteDAO.hコードは以下の通りです.
domannグループのNoteコードは以下の通りです.二つの属性だけがdateでメモを作成する日付です.contentはメモの内容です.
低結合企業級システムアーキテクチャ設計
私たちはよくJavaEEまたは.Netが開発した製品を「システム」と呼びますが、モバイルプラットフォーム(主にAndroid、iOS、Window Phone)が開発した製品は「アプリケーション」です.「システム」は複雑で、アーキテクチャ設計が必要ですが、「応用」は比較的簡単です.これは構造問題を考える必要がないということですか?
まず、企業レベルのシステム構造設計について理解します.ソフトウェア設計の原則は、ソフトウェアシステムの「多重化可能性」と「拡張可能性」を向上させることであり、システムアーキテクチャ設計は階層分割方式を採用し、これらの階層の間は松結合であり、階層の内部は高凝集である.結合を低減することはソフトウェア設計の目標であり、低結合のシステムを設計できることは、我々のシステムが「多重化可能性」と「拡張可能性」を持つことを意味する.汎用低結合JavaEEおよび.Net企業レベルシステムアーキテクチャ図.
表示層は、ユーザとシステムが相互作用するコンポーネントのセットであり、ユーザは、この層を通してシステムに要求または命令を送信し、システムはこの層を通してユーザ要求または命令を受信し、その後、命令を消化吸収して次の層に呼び出し、呼び出しの結果をこの層に示す.表示層は軽薄であるべきで、業務ロジックを持つべきではない.
業務層はシステムの中核業務処理層であり、表示層の指令とデータを受信し、消化吸収後、組織業務ロジックの処理を行い、結果を表示層に返す.
データの永続層は、サービス層がデータベース層にアクセスするために使用され、設計仕様から結合度を低減するために、サービス層はデータベースにアクセスするコードを持つべきではなく、データベースにアクセスするコードはデータの恒久層に置くべきである.
情報システム層は、システムのデータソースであり、データベース、ファイル、レガシーシステムおよびネットワークデータであり得る.
移動プラットフォームの階層構造設計
モバイルプラットフォームのアプリケーションはバージョンを縮小するシステムであり、アーキテクチャの設計も必要であるが、すべてのアプリケーションは必ず汎用低結合企業レベルシステムアーキテクチャに基づくものではなく、一般的には主に情報処理に関連するアプリケーションがこのようなアーキテクチャ設計モードを使用する.iOSプラットフォーム一般情報処理アプリケーション階層アーキテクチャ設計図.
表示層は、iOSにおける表示層がUIKit Framewarkによって構成されており、私たちが前に勉強しているビュー、コントローラ、コントロール、およびイベント処理などの内容が含まれている.
業務ロジック層は、どのフレームを採用するかは具体的な業務によって決まりますが、一般的には一定の業務処理機能を持つObjective-CとC++パッケージの種類、またはCパッケージの関数です.
データの持続層は、ローカルまたはネットワークのデータアクセスを提供し、SQLiteデータAPI関数にアクセスするか、CoreData技術にアクセスするか、あるいはファイルにアクセスするNSFileManager、またはネットワーク通信などの技術を提供します.
情報システム層は、iOSについての情報源は、ローカルとネットワークに分けられている.ローカルデータはファイルに入れてもいいし、データベースに入れてもいいです.現在iOSローカルデータベースはSQLite 3を採用しています.ネットはあるクラウドサービスであってもいいし、一般的なWebサービスであってもいいです.
同じプロジェクトに基づく階層
構造は私たちのiPhoneとiPadの開発にとって現実的な意義を持っています.iOS(iPhoneとiPadの2つのプラットフォーム)に基づく「Myメモ」を作成する場合、メモを追加、削除、検索するための基本的な機能を備えています.「メモ」アプリケーションの用例図は、階層的に設計した上で、iPhone版とiPad版が異なっています.業務ロジック層、データ持久層、情報システム層は共用できます.これは私たちの仕事量を大幅に減らすことができます.
iOSはiPhoneとiPadの二つのプラットフォームを考慮して、デザインのプロトタイプのスケッチ、iPhoneバージョンの「Myメモ」を作成しました.iPad版の「Myメモ」の横画面デザインのプロトタイプのスケッチ、iPad版の「Myメモ」の縦画面デザインのプロトタイプのスケッチ.
iOSプラットフォームの階層化の具体的な方法には、同じ工程に基づいて階層化され、作業空間に基づいて異なる工程の階層化と静的リンクライブラリの階層化がある.この小節は同じ工程に基づく階層を紹介する.
前の文では、適応iPhoneとiPadを構築するプロジェクトを紹介しました.つまり、私たちが今話しているのは同じプロジェクトに基づく階層モデルです.「覚書」の応用コードを読んでください.実現過程はここで紹介しないで、「MyNotes」プロジェクトを開けてください.Xcodeプロジェクトのナビゲーションパネルには3つのグループがあります.Presentation Layer、Business LogicLayerとPersistencLayer.この3つのグループを作成する目的は、それぞれの階層の中のクラスを対応するグループに配置して管理しやすくすることであり、Presentation Layerは、配置された表示層相関クラスであり、Business LogicLayerは配置されたトラフィック論理層の関連クラスであり、PersistensceLayerは、恒久層の配置関連クラスである.
各階の下はどう分けますか?ビジネスモジュールによって分けられます.コンポーネントの機能によって分けられます.本アプリケーションではPersistensceLayer層はdaoとdomainの二つのグループに分けられます.daoはデータにアクセスするCRUDの4つの方法があり、結合度を下げるためにdaoは一般的にプロトコル(またはJavaインターフェース)として設計され、異なるデータソースによって異なる実施形態が採用されます.domainグループは実体類で、実体は応用中の「人」、「事」、「物」などです.
daoグループのNoteDAO.hコードは以下の通りです.
@interface NoteDAO : NSObject // @property (nonatomic,strong) NSMutableArray* listData; + (NoteDAO*)sharedManager; // Note -(int) create:(Note*)model; // Note -(int) remove:(Note*)model; // Note -(int) modify:(Note*)model; // -(NSMutableArray*) findAll; // -(Note*) findById:(Note*)model; @end
listData属性はデータテーブル中のデータを保存するために使用されます.各要素はNoteオブジェクトで、Noteオブジェクトはデータテーブル中のデータを表します.(NoteDAO*)NoteDAO単体のオブジェクトを取得するために、sharedManager方法を使用します.daoグループのNoteDAO.mコードは以下の通りです.@implementation NoteDAO static NoteDAO *sharedManager = nil; + (NoteDAO*)sharedManager { static dispatch_once_t once; dispatch_once(&once, ^{ NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; NSDate *date1 = [dateFormatter dateFromString:@"2010-08-04 16:01:03"]; Note* note1 = [[Note alloc] init]; note1.date = date1; note1.content = @”Welcome to MyNote.”; NSDate *date2 = [dateFormatter dateFromString:@"2011-12-04 16:01:03"]; Note* note2 = [[Note alloc] init]; note2.date = date2; note2.content = @” MyNote。”; sharedManager = [[self alloc] init]; sharedManager.listData = [[NSMutableArray alloc] init]; [sharedManager.listData addObject:note1]; [sharedManager.listData addObject:note2]; }); return sharedManager; } // Note -(int) create:(Note*)model { [self.listData addObject:model]; return 0; } // Note -(int) remove:(Note*)model { for (Note* note in self.listData) { // if ([note.date isEqualToDate:model.date]){ [self.listData removeObject: note]; break; } } return 0; } // Note -(int) modify:(Note*)model { for (Note* note in self.listData) { // if ([note.date isEqualToDate:model.date]){ note.content = model.content; break; } } return 0; } // -(NSMutableArray*) findAll { return self.listData; } // -(Note*) findById:(Note*)model { for (Note* note in self.listData) { // if ([note.date isEqualToDate:model.date]){ return note; } } return nil; } @end
NoteDAOは単一の例の設計モードを採用したことを実現しました.この設計はDAO設計モードと関係がなく、主にデータにアクセスするのに便利です.データはlistData属性の中に置いてあります.(データベースからのはずですが、データベースアクセス技術はまだ勉強していません.)、CRUD方法もすべてlistDataに対する処理です.データベースではありません.domannグループのNoteコードは以下の通りです.二つの属性だけがdateでメモを作成する日付です.contentはメモの内容です.
// // Note.h #import <Foundation/Foundation.h> @interface Note : NSObject @property(nonatomic, strong) NSDate* date; @property(nonatomic, strong) NSString* content; @end // // Note.m #import ”Note.h” @implementation Note @end
ビジネスロジック層Business LogicLayerのクラスの設計は一般的に業務モジュールによって設計されています.その方法は業務処理方法です.以下のコードはNoteBL.hコードです.@interface NoteBL : NSObject // Note -(NSMutableArray*) createNote:(Note*)model; // Note -(NSMutableArray*) remove:(Note*)model; // -(NSMutableArray*) findAll; @end
NoteBL.hには三つの方法が定義されています.三つの方法を定義するのは私の業務ニーズによって決められます.業務ニーズが参考にできる用例図です.下のコードはNoteBL.mコードです.@implementation NoteBL // Note -(NSMutableArray*) createNote:(Note*)model { NoteDAO *dao = [NoteDAO sharedManager]; [dao create:model]; return [dao findAll]; } // Note -(NSMutableArray*) remove:(Note*)model { NoteDAO *dao = [NoteDAO sharedManager]; [dao remove:model]; return [dao findAll]; } // -(NSMutableArray*) findAll { NoteDAO *dao = [NoteDAO sharedManager]; return [dao findAll]; } @end
内容は『iOS 6開発ガイド』から来ています.作者:関東昇