OSDN Git Service

ユーザ管理クラスをリファクタ。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Wed, 19 Oct 2016 02:23:21 +0000 (11:23 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Wed, 19 Oct 2016 02:23:21 +0000 (11:23 +0900)
ユーザリストを List から IReadOnlyList に変更。

StrokeStyleT/ステージ/ログイン/ログインステージ.cs
StrokeStyleT/ユーザ/ユーザ管理.cs

index e7b5ef3..bcf7675 100644 (file)
@@ -114,7 +114,8 @@ namespace SST.ステージ.ログイン
                        }
 #else
 #warning ユーザ選択画面が完成するまでは、AutoPlayer で自動的にログインするようにする。
-                       this.ユーザインデックス = StrokeStyleT.ユーザ管理.ユーザリスト.FindIndex( ( user ) => user.名前 == Properties.Resources.AUTOPLAYER );
+                       this.ユーザインデックス = StrokeStyleT.ユーザ管理.ユーザのインデックスを返す( Properties.Resources.AUTOPLAYER );
+                       Trace.Assert( 0 <= this.ユーザインデックス, "[バグあり] AutoPlayer ユーザが存在しません。" );
                        this.現在のフェーズ = フェーズ.確定;
                        return;
 #endif
index e203e5d..482df14 100644 (file)
@@ -9,19 +9,19 @@ namespace SST.ユーザ
 {
        public class ユーザ管理
        {
-               public List<ユーザ> ユーザリスト { get; } = new List<ユーザ>();
+               public IReadOnlyList<ユーザ> ユーザリスト => ( this.bs_ユーザリスト );
                public ユーザ 現在選択されているユーザ { get; protected set; } = null;   // 外から設定するにはメソッドを使う。
 
                public ユーザ管理()
                {
                        this.初期化する();
-                       this.ユーザリスト.Add( new ユーザ( Properties.Resources.AUTOPLAYER ) );  // 既定ユーザ
+                       this.bs_ユーザリスト.Add( new ユーザ( Properties.Resources.AUTOPLAYER ) );  // 既定ユーザ
                }
                public void ユーザを選択する( ユーザ 選択対象ユーザ )
                {
                        if( null != 選択対象ユーザ )   // null でもエラーじゃない
                        {
-                               if( null == this.ユーザリスト.Find( user => user == 選択対象ユーザ ) )
+                               if( null == this.bs_ユーザリスト.Find( user => user == 選択対象ユーザ ) )
                                {
                                        var msg = "存在しないユーザを選択しようとしました。";
                                        FDK.Log.ERROR( msg );
@@ -34,7 +34,7 @@ namespace SST.ユーザ
                }
                public void ユーザを選択する( string ユーザ名 )
                {
-                       var 名前に該当するユーザ = this.ユーザリスト.Find( user => user.名前 == ユーザ名 );
+                       var 名前に該当するユーザ = this.bs_ユーザリスト.Find( user => user.名前 == ユーザ名 );
                        if( null == 名前に該当するユーザ )
                        {
                                var msg = $"存在しない名前「{ユーザ名}」のユーザを選択しようとしました。";
@@ -49,13 +49,19 @@ namespace SST.ユーザ
                {
                        this.ユーザを選択する( this.ユーザリスト[ index ] );
                }
-
-               public void UsersXmlを保存する()
+               /// <remarks>
+               /// IReadOnlyList には FindIndex() がないので、このクラスでその機能を提供する。
+               /// </remarks>
+               /// <returns>存在しなかったら -1 を返す。</returns>
+               public int ユーザのインデックスを返す( string ユーザ名 )
                {
-                       this.UsersXmlを保存する( FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.ユーザXmlファイルパス ) );
+                       return this.bs_ユーザリスト.FindIndex( ( user ) => ( user.名前 == ユーザ名 ) );
                }
-               public void UsersXmlを保存する( string ファイルパス )
+
+               public void UsersXmlを保存する()
                {
+                       string ファイルパス = FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.UsersXmlファイルパス );
+
                        try
                        {
                                var XML文書 = new XDocument( new XDeclaration( version: "1.0", encoding: "utf-8", standalone: "yes" ) );
@@ -86,17 +92,15 @@ namespace SST.ユーザ
                }
                public void UsersXmlを読み込む()
                {
-                       this.UsersXmlを読み込む( FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.ユーザXmlファイルパス ) );
-               }
-               public void UsersXmlを読み込む( string ファイルパス )
-               {
+                       string ファイルパス = FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.UsersXmlファイルパス );
+
                        this.初期化する();
 
                        if( false == File.Exists( ファイルパス ) )
                        {
                                FDK.Log.WARNING( $"ユーザファイルが存在しません。作成します。[{FDK.フォルダ.絶対パスをフォルダ変数付き絶対パスに変換して返す( ファイルパス )}]" );
                                this.AutoPlayerを追加する();
-                               this.UsersXmlを保存する( ファイルパス );
+                               this.UsersXmlを保存する();
                                return;
                        }
 
@@ -119,12 +123,12 @@ namespace SST.ユーザ
                                                        if( false == string.IsNullOrEmpty( 新ユーザ.名前 ) )
                                                        {
                                                                // すでに同じ名前が存在するなら削除する。
-                                                               var 同名ユーザ = this.ユーザリスト.FindIndex( user => user.名前 == 新ユーザ.名前 );
+                                                               var 同名ユーザ = this.bs_ユーザリスト.FindIndex( user => user.名前 == 新ユーザ.名前 );
                                                                if( 0 <= 同名ユーザ )
-                                                                       this.ユーザリスト.RemoveAt( 同名ユーザ );
+                                                                       this.bs_ユーザリスト.RemoveAt( 同名ユーザ );
 
                                                                // リストに追加する。
-                                                               this.ユーザリスト.Add( 新ユーザ );
+                                                               this.bs_ユーザリスト.Add( 新ユーザ );
                                                        }
                                                }
                                        }
@@ -136,25 +140,30 @@ namespace SST.ユーザ
                        }
 
                        // AutoPlayer が存在しないなら、追加する。
-                       if( -1 == this.ユーザリスト.FindIndex( ( user ) => user.名前 == Properties.Resources.AUTOPLAYER ) )
+                       if( -1 == this.bs_ユーザリスト.FindIndex( ( user ) => user.名前 == Properties.Resources.AUTOPLAYER ) )
                        {
                                this.AutoPlayerを追加する();       // 追加して
                                this.UsersXmlを保存する();   // 保存。
                        }
                }
-
-               protected readonly string ユーザXmlファイルパス = @"$(AppData)\Users.xml";
+               protected readonly string UsersXmlファイルパス = @"$(AppData)\Users.xml";
 
                private void 初期化する()
                {
-                       this.ユーザリスト.Clear();
+                       this.bs_ユーザリスト.Clear();
                        this.現在選択されているユーザ = null;
                }
                private void AutoPlayerを追加する()
                {
                        var autoPlayer = new ユーザ( Properties.Resources.AUTOPLAYER );
                        autoPlayer.チップの自動演奏を一括設定する( true );
-                       this.ユーザリスト.Add( autoPlayer );
+                       this.bs_ユーザリスト.Add( autoPlayer );
                }
+
+               #region " バックストア。"
+               //----------------
+               private List<ユーザ> bs_ユーザリスト = new List<ユーザ>();
+               //----------------
+               #endregion
        }
 }