• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javaandroidc++linuxc#objective-ccocoa誰得qtrubybathyscaphegamephpguicwindows翻訳pythonomegattwitterframeworkbtronarduinovb.net計画中(planning stage)directxpreviewertestゲームエンジンdom

FreeTrainの進化系を目指す


Commit MetaInfo

Revision68 (tree)
Zeit2016-12-11 19:23:56
Autorc477

Log Message

IModelRepository, RepositoryBase

Ändern Zusammenfassung

Diff

--- trunk/core/core/data/IModelRepository.cs (nonexistent)
+++ trunk/core/core/data/IModelRepository.cs (revision 68)
@@ -0,0 +1,82 @@
1+using nft.framework;
2+using System;
3+using System.Collections.Generic;
4+using System.Linq;
5+using System.Text;
6+using System.Threading.Tasks;
7+
8+namespace nft.core.data
9+{
10+ /// <summary>
11+ /// データリポジトリのコアインターフェース
12+ /// 標準実装はRepositoryBase
13+ /// </summary>
14+ /// <typeparam name="T"></typeparam>
15+ public interface IRepository<T> where T: IHasNameAndID
16+ {
17+ /// <summary>
18+ /// モデルを追加する。既にモデル
19+ /// </summary>
20+ /// <param name="model"></param>
21+ void Add(T model);
22+
23+ /// <summary>
24+ /// IDで指定したモデルを削除し、削除したモデルを返す。該当モデルが存在しない場合エラーにはならず、nullを返す。
25+ /// </summary>
26+ /// <param name="id"></param>
27+ /// <returns>removed model or null if not exist</returns>
28+ T RemoveByID(string id);
29+
30+ /// <summary>
31+ /// IDを指定してモデルを取得する。
32+ /// setがないのは、間違ったIDでmodel登録されるのを防ぐため。Addを使用してください。
33+ /// </summary>
34+ /// <param name="id"></param>
35+ /// <returns></returns>
36+ T this[string id] { get; }
37+
38+ /// <summary>
39+ /// リポジトリに含まれるすべてのモデルのリストを取得します
40+ /// </summary>
41+ IEnumerable<T> List { get; }
42+
43+ /// <summary>
44+ /// リポジトリに含まれるモデルの数を取得します
45+ /// </summary>
46+ int Count { get; }
47+ }
48+
49+ /// <summary>
50+ /// IRepositoryの拡張メソッド
51+ /// </summary>
52+ public static class RepositoryExtesion
53+ {
54+ /// <summary>
55+ /// 指定したモデルを削除する。
56+ /// </summary>
57+ /// <typeparam name="T"></typeparam>
58+ /// <param name="repository"></param>
59+ /// <param name="model">The model to be removed</param>
60+ public static void Remove<T>(this IRepository<T> repository, T model) where T: IHasNameAndID
61+ {
62+ repository.RemoveByID(model.ID);
63+ }
64+
65+ /// <summary>
66+ /// リポジトリに指定したIDのモデルが存在するかどうか調べる。存在すればtrue
67+ /// </summary>
68+ /// <typeparam name="T"></typeparam>
69+ /// <param name="repository"></param>
70+ /// <param name="model"></param>
71+ /// <returns>true if the model correspond to the id is exist.</returns>
72+ public static bool HasID<T>(this IRepository<T> repository, T model) where T : class, IHasNameAndID
73+ {
74+ return repository[model.ID] != null;
75+ }
76+
77+ public static T findByID<T>(this IRepository<T> repository, T model, T _default = null) where T : class, IHasNameAndID
78+ {
79+ return repository[model.ID] ?? _default;
80+ }
81+ }
82+}
--- trunk/core/core/data/RepositoryBase.cs (nonexistent)
+++ trunk/core/core/data/RepositoryBase.cs (revision 68)
@@ -0,0 +1,52 @@
1+using nft.framework;
2+using System;
3+using System.Collections.Generic;
4+using System.Linq;
5+using System.Text;
6+using System.Threading.Tasks;
7+
8+namespace nft.core.data
9+{
10+ public class RepositoryBase<T> : IRepository<T> where T: class, IHasNameAndID
11+ {
12+ protected Dictionary<string, T> dictionary = new Dictionary<string, T>();
13+
14+ public T this[string id]
15+ {
16+ get
17+ {
18+ T ret;
19+ if( dictionary.TryGetValue(id, out ret) ) return ret;
20+ return null;
21+ }
22+ }
23+
24+ public int Count
25+ {
26+ get
27+ {
28+ return dictionary.Count;
29+ }
30+ }
31+
32+ public IEnumerable<T> List
33+ {
34+ get
35+ {
36+ return dictionary.Values;
37+ }
38+ }
39+
40+ public void Add(T model)
41+ {
42+ dictionary.Add(model.ID, model);
43+ }
44+
45+ public T RemoveByID(string id)
46+ {
47+ T ret = this[id];
48+ dictionary.Remove(id);
49+ return ret;
50+ }
51+ }
52+}