Serene.NET(スィリーン ドット ネット)
Serene.NETは㈱アークシステムとNextscape社が共同で開発したフレームワーク
㈱アークシステムはJava/C#を得意とする技術者集団で、各種OSSへの開発にも取り組んで います。一方NextscapeはC++/C#を得意としており、さまざまな業務システムの開発を してきました。 これら2社の豊富なノウハウを結集して、構築したのがSerene.NETです。
Serene.NETの守備範囲は、Windowsアプリケーション、Webアプリケーションおよび バッチアプリケーションとなります(今後Silverlightへの取り組みも予定)。 共通しているビジネスロジック層(データアクセスが主)は、上記プラットフォームに依存 することなく統一したアーキテクチャを採用しております。
Serene.NETは、開発フレームワークだけでなく、開発環境(通常はVisualStudio)の最適化 も行っております。
システム開発は、リリースして終わりではありません。Serene.NETでは、運用視点につい てもスコープとしております。

Serene.NETアーキテクチャとOSSについて
Serene.NETは数多くのOSSを活用しております。またSerene.NETで生まれたコンポーネントの幾つかはOSSとして公開する予定です。 ここでは、これらOSSとの関わりについて説明いたします。

ビジネス・ロジック層
先の図で記載した通り、ビジネスロジック層には、いくつかの大きなコンポーネントが 含まれております。 下記では、それぞれについて解説します。
DataAccess
データベースへのアクセスは、OSSであるS2Daoを使っている。S2DaoはS2をベースに
しており、DI(Dependency Injection)技術を使ったものです。
S2Daoではタイプセーフでない部分があったり、柔軟なデータベースへの問い合わせを
苦手としています。よって、より柔軟なデータ操作を目的としたDBFluteを採用しています
(DBFluteの開発にも一部お手伝いをしています)。
.NETにおいてDIを使うケースは少ないと思いますが、このDIを使い、テストファースト(テスト駆動開発)による開発を一部で行っております。
また、単にS2Daoを使うのではなく、プレゼンテーション層からビジネス層(データアクセス層)へのアクセスを明確にして、それぞれへの依存度を最小限にすることも可能になっています。
DataConvert
データアクセスのところでも一部説明していますが、プレゼンテーション層からデータアクセス層への型(クラス)変換が発生しています。
この型変換を行うのがDataConvertクラスです。
2つの異なるクラス間で、同じメンバー名であれば、暗黙的に変換が行うことができますが、異なる名称や異なる深さの場合などは、属性を使い型変換を行えるようにサポートしています。
また、メンバー名の違いのみならず、型(intやstringなど)の相違についても、可能な限り
型に合わせて変換が行える仕組みになっております。
OpenCSV.NET(OSSとして公開予定)
Java版OpenCSV(OSSとして公開しているもの)をC#へ移植しました。
CommonLibrary
特にプラットフォームに依存することのない、クラスライブラリが数多く存在します。
Logging
OSSのlog4netを取り込んでいます。これによりさまざまな通知方式が可能になり
また、独自のlog4netアダプタを開発しております。
(※一般的な通知方法としてのメール,イベントログ,ファイルなどはlog4netデフォルトで可能)
Context
プラットフォームに依存することのない、セッション情報を管理するためのクラスです。
アプリケーションとフレームワーク間での統一したデータアクセスのためにも使われます。
Container
DIコンテナを隠蔽しています。実施にはS2を使っていますが、Sereneフレームワーク で開発したアプリケーションが、特定のDIに依存することの無いようにしています。
Config
アプリケーション構成情報(Web.ConfigやApp.Configなど)を、アクセスしやすくするための機能を提供します。
Message
アプリケーションで扱う様々なメッセージ(文字列)を、統一的にアクセスし、リビルド(再コンパイル)無しに変更を可能とする機構です。
実際にはEXCELなどでメッセージを定義し、これをXMLに変換し、このXMLファイルへのアクセスするためのクラスを生成(Generate)し、アプリケーションから利用しております。
これによりタイプセーフなメッセージアクセスが可能となります。
StringUtil
Stringクラスをベースに、さまざまな変換を行うクラスを用意しています。
バッチアプリケーション・フレームワーク
BatchFramework
データアクセス以外のバッチプログラムで必要な部分を既定しています。
主な処理内容としては
・コンテキストの初期化
・ロギングの初期化
・Exceptionの正しいハンドリング
・パフォーマンス検証のためのログイング
・終了コード(ExitCode)の規定
・引数パラメータの解釈方法
です。
これらの作法を厳守(フレームワークが暗黙的な部分も含む)することによって、品質を担保することが可能になります。
Windowsアプリケーション・フレームワーク
TabWindow
最近のはやりはタブ形式のウィンドウが増えました。.NETのWinFormではタブウィンドウをサポートしていません。
Serene.NETフレームワークでは、タブ形式のウィンドウを利用が可能になり、そのユーザーエクスペリエンスは、VisualStudioと同等なものとなっております。
(タブ形式ウィンドウはMDIのルック&フィールを拡張したものになっています)
MDI MenuDispatch
MDIで問題になるのはメニューの処理です。メニューの所有者はMainFrameですが、MDI上の子ウィンドウは、MainFrameとは一切関係ありません。
これは関係の無い2つのオブジェクト間をシームレスにやりとりするためのフレームワークを用意しています。
これによって、メニュー処理が、アクティブなMDIウィンドウで処理できるようになります。
また、子ウィンドウで処理しないようなメニューは、MainFrameが処理する仕組みになっています。(Active/InactiveやClickなど)
開発環境
システム開発は、開発環境のみではできません。 (小規模は可能ですが、なにかと情報共有に問題が出てきます) そこでSerene.NETフレームワークでは、ナレッジシステムについても考えております。
SDE(SereneDevelopmentEnvironment)
OSSのwiki(状況共有ツール)、mantis(問題管理、バグトラッキングツール)、Subversion(ファイル管理)、Hudson(ビルド管理)で構成されております。
これら独立したOSSを、統合的に管理するシステムを構築し、シームレスに扱うことが可能になります。
将来では、VisualStudioからSDEを透過的にアクセスする機能を提供する予定です。
開発環境のカスタマイズ
O/Rマッパー(OSSとして公開予定)
フレームワークにデータアクセス層を持っているのは紹介しました。これをタイプセーフにアクセスするためには、アプリケーションドメインに特化したクラスを生成する必要があります。
よって独自のO/Rマッパーを開発しました。このO/Rマッパーはさまざまなデータアクセスコンポーネントに対応し、データベースへの対応もプラグインで可能です。
TerracedSVN(OSSとして公開予定)
VisualStudioでのソース管理はSubversionに対応しておりません。有償で販売しているものがありますが、フリーで使えて、軽いものはありません。
弊社では、Subversionのプラグインを開発し、ソリューションエクスプローラーからSubversionの操作が可能になります。
運用監視
JobManager(OSSとして公開予定)
システムには夜間バッチなどの定期的に動作させるためのバッチがあります。
通常Windowsではタスクスケジューラーを利用したり、unix系ではcronを利用するのが一般的だと思います。
これらタスクスケジューラーやcronでは、細かい制御ができませんし、監視する機構がありません。
これらを考慮した製品は世の中に多数存在しますが、どれも高価なものが多いのも現実です。
Serene.NETでは、これらの問題を解決するためにJobManagerを開発しました。
- 定期的なバッチ起動
- 年月日時分秒、曜日指定、営業日指定などが可能。
- キューイングバッチ起動
- キューを使い、バッチを順次実行。
- マルチプラットフォーム
- Windows環境,Linux環境への対応(実行サービス)。
- 監視機構
- バッチの障害発生時に通知する機能を用意しています。
一般的なメール、イベントログなどの通知方法は当然ながら、Skypeなどの独自の通知方法をプラグインで追加 することができます。
- 負荷分散
- 実行サービスを複数用意し、バッチを負荷分散して実行できます。
- Webによる管理
- Webにより統合管理が可能です。将来はWindowsアプリケーション、Siliverlightアプリケーションにも対応する予定です。
継続的な改善サイクル
Serene.NETの開発としては、「フレームワーク開発」 → 「適用」 → 「フィードバック」 → 「バージョンアップ」を繰り返してきました。
このスタイルは今後も継続しながら、新しいエッセンスを取り入れていく予定です。
