Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- namespace ConsoleApp3 {
- class Program {
- static void Main(string[] args) {
- IUserInputtingReceiver main = new UserInputtingReceiver();
- main.StartChecking();
- }
- }
- interface IUserInputtingReceiver {
- void StartChecking();
- }
- class UserInputtingReceiver : IUserInputtingReceiver {
- public void StartChecking() {
- IPasswordChecker checker = new PasswordChecker();
- InitializeEvents(checker);
- while(true) {
- Console.WriteLine("ユーザー名を入力してください:");
- var userName = Console.ReadLine();
- Console.WriteLine("パスワードを入力してください:");
- var password = Console.ReadLine();
- Console.WriteLine("\n認証結果");
- checker.ReadUserInfo(userName, password);
- Console.WriteLine("--------");
- }
- }
- private void InitializeEvents(IPasswordChecker checker) {
- checker.UndefinedUserEntered += Checker_UndefinedUserEntered;
- checker.InvalidPasswordEntered += Checker_InvalidPasswordEntered;
- checker.CertificationSucceeded += Checker_CertificationSucceeded;
- checker.CertificationFailed += Checker_CertificationFailed;
- }
- private void Checker_UndefinedUserEntered(object sender, UserInfoEventArgs e) {
- Console.WriteLine($"・ユーザー名\"{e.Info.UserName}\"は存在しません");
- }
- private void Checker_InvalidPasswordEntered(object sender, UserInfoEventArgs e) {
- Console.WriteLine($"・パスワード\"{e.Info.Password}\"は正しくありません");
- }
- private void Checker_CertificationSucceeded(object sender, UserInfoEventArgs e) {
- Console.WriteLine($"・\"{e.Info.UserName}\"のログインに成功しました");
- }
- private void Checker_CertificationFailed(object sender, UserInfoEventArgs e) {
- Console.WriteLine($"・\"{e.Info.UserName}\"のログインに失敗しました");
- }
- }
- interface IPasswordChecker {
- event EventHandler<UserInfoEventArgs> CertificationSucceeded;
- event EventHandler<UserInfoEventArgs> CertificationFailed;
- event EventHandler<UserInfoEventArgs> UndefinedUserEntered;
- event EventHandler<UserInfoEventArgs> InvalidPasswordEntered;
- void ReadUserInfo(string name, string word);
- }
- class PasswordChecker : IPasswordChecker {
- ////=============================================================================
- //// Local Field
- ////
- ////=============================================================================
- private IDictionary<string, string> _userInfoDict = new Dictionary<string, string>() {
- ["Tsumio"] = "Tsumio114Tensaida4",
- ["Tkool"] = "abcd1234",
- ["Unity"] = "yunithi",
- ["NEET"] = "No_Job",
- };
- ////=============================================================================
- //// Properties
- ////
- ////=============================================================================
- private IDictionary<string, string> UserInfoDict {
- get {
- return _userInfoDict;
- }
- }
- ////=============================================================================
- //// Events
- ////
- ////=============================================================================
- public event EventHandler<UserInfoEventArgs> CertificationSucceeded;
- public event EventHandler<UserInfoEventArgs> CertificationFailed;
- public event EventHandler<UserInfoEventArgs> UndefinedUserEntered;
- public event EventHandler<UserInfoEventArgs> InvalidPasswordEntered;
- protected virtual void OnCertificationSucceeded(UserInfoEventArgs e) {
- CertificationSucceeded?.Invoke(this, e);
- }
- protected virtual void OnCertificationFailed(UserInfoEventArgs e) {
- CertificationFailed?.Invoke(this, e);
- }
- protected virtual void OnUndefinedUserEntered(UserInfoEventArgs e) {
- UndefinedUserEntered?.Invoke(this, e);
- }
- protected virtual void OnInvalidPasswordEntered(UserInfoEventArgs e) {
- InvalidPasswordEntered?.Invoke(this, e);
- }
- ////=============================================================================
- //// Password Checker
- ////
- ////=============================================================================
- private bool IsUserNameValid(string userName) {
- return UserInfoDict.ContainsKey(userName);
- }
- private bool LoginSuccessfully(string userName, string password) {
- return UserInfoDict[userName] == password;
- }
- private bool TryToLogin(UserInfo info) {
- if(!IsUserNameValid(info.UserName)) {
- OnUndefinedUserEntered(new UserInfoEventArgs(info));
- return false;
- }
- if(LoginSuccessfully(info.UserName, info.Password)) {
- return true;
- } else {
- OnInvalidPasswordEntered(new UserInfoEventArgs(info));
- return false;
- }
- }
- public void ReadUserInfo(string userName, string password) {
- using(var info = new UserInfo(userName, password)) {
- if(TryToLogin(info)) {
- OnCertificationSucceeded(new UserInfoEventArgs(info));
- } else {
- OnCertificationFailed(new UserInfoEventArgs(info));
- }
- }
- }
- }
- class UserInfo : IDisposable {
- public string UserName { get; private set; }
- public string Password { get; private set; }
- public UserInfo(string name, string password) {
- UserName = name;
- Password = password;
- }
- #region IDisposable Support
- private bool disposedValue = false; // 重複する呼び出しを検出するには
- protected virtual void Dispose(bool disposing) {
- if(!disposedValue) {
- if(disposing) {
- // TODO: マネージ状態を破棄します (マネージ オブジェクト)。
- Console.WriteLine("\nDispose実行");
- Password = String.Empty;
- }
- // TODO: アンマネージ リソース (アンマネージ オブジェクト) を解放し、下のファイナライザーをオーバーライドします。
- // TODO: 大きなフィールドを null に設定します。
- disposedValue = true;
- }
- }
- // TODO: 上の Dispose(bool disposing) にアンマネージ リソースを解放するコードが含まれる場合にのみ、ファイナライザーをオーバーライドします。
- // ~PasswordRecorder() {
- // // このコードを変更しないでください。クリーンアップ コードを上の Dispose(bool disposing) に記述します。
- // Dispose(false);
- // }
- // このコードは、破棄可能なパターンを正しく実装できるように追加されました。
- public void Dispose() {
- // このコードを変更しないでください。クリーンアップ コードを上の Dispose(bool disposing) に記述します。
- Dispose(true);
- // TODO: 上のファイナライザーがオーバーライドされる場合は、次の行のコメントを解除してください。
- // GC.SuppressFinalize(this);
- }
- #endregion
- }
- class UserInfoEventArgs : EventArgs {
- public UserInfo Info { get; }
- public UserInfoEventArgs(UserInfo info) {
- Info = info;
- }
- }
- }
Add Comment
Please, Sign In to add comment