No more Death March

あるSEのチラシの裏 C# WPF

プログラミングで見かける英単語メモ

Application アプリケーション
Run 走る
Execute 実行
Commit コミット
RollBack ロールバック
Save 保存
Load 読み込み
Store 保存
Restore 復元
Register 登録
Repository 貯蔵庫
Cancel 取り消し
Repeat 繰り返し
Receive 受け取る
Throw 投げる
Ignore 無視する
Reverse
Clear
Add
Append
Remove
Contains
Shutdown シャットダウン
Find
FindAll
Search 検索
Criteria 基準
Continue 継続する
Initialize 初期化する
Assert 表明する
Build
Output 出力
Input 入力
Show
Display
Open 開く
Close 閉じる
Fail 失敗する
Hide 隠す
Format 整える
Initial 当初の
Default 既定の
Entry 入場する
Edit 編集する
Change 変える
Redo やり直す
Undo 元通りにする
Notify 通知する
Handle 操作する
Perfome (仕事や任務を)行う/する

Commma カンマ
Colon コロン
Dot ドット
Slash スラッシュ
Separator 区切り文字

One 一方
Other 他方
Pair ペア
Tuple 複数の要素からなる組み合わせ

Query 問い合わせ

Single 単一の
Multi 複数の

Apply 適用する

Activate 活性化する
Inactivate 不活性化する
Activity 活動

Content 内容
Context 文脈

Wide 広い
Narrow 狭い
Upper 上部の
Lower 下部の
UpperCase 大文字
LowerCase 小文字

Table
Row
Column
Index
Truncate
Select
Update
Upsert
Merge
Insert
Delete
Result
Return
Premitive
Byte
String
Integer
Long
Decimal
String
DateTime
Size
Point
Type
Charactor 文字
DecimalPlace 小数点

Process 手順/手続き
State 状態
Kind 種類
Decorator
Adapter
Mediator メディエーター/仲介者
Visitor
Visit 訪問する
Aceppt 受け入れる

Error エラー
Warning 警告
Information 情報
Notice お知らせ
Notification 通知

Total 合計
Subtotal 小計

Event 出来事
Publish 発行
Subscribe 申し込む
Unsubscribe 退会

Bank 銀行
Person 個人
Customer 顧客

All 全て
Any 何れか
None 何一つない


Predicate 述語
Specification 仕様

List リスト
Collection コレクション
Array 配列
Empty 空

Matrix 行列

Property プロパティ、所有物
Meghod メソッド
Class クラス
Instance インスタンス
Object
Attribute 属性
Constant

Variable 可変

Mutable 可変なオブジェクト
Immutable 不変なオブジェクト

Array

Solution
Project
Public
Private
Internal
Interface
Implement
Concrete
Static
Dynamic


View
Model
ViewModel
Behaivior

Confirmation 確認
Permit 許可
Reject 拒否

Message メッセージ
Log ログ

Clich クリック
Enter エンター
Leave リーブ
Focus フォーカス
Width 幅
Height 高さ
Location 位置
Left
Top

Interval 間隔


Create 生成
Dispose

File
Directory
Folder

Node
Parent
Child/Children
Forest
Root
Leaf

Top
Bottom
Right
Left

Vertical 垂直
Horizontal 水平

Next
Current
Previous

If
Else
And 論理積
Or 論理和
AndAlso
OrElse
Not 否定
Inverse 反対の

Start
End
Stop
Begin
Period
Range

Date
Time
Year
Month
Day
DayOfWeek
Week
WeekEnd 週末
Ticks
MilliSecond
Meiji
Taisho
Showa
Heisei

Count 件数
Index
Length 長さ

Money 金額
Period 期間

Detail
Subject 件名
Remark 備考
Note 備考
Description 説明
Line 改行
Unit 単位
PhoneNumber 電話番号
Address 住所
Contact 連絡先
Postcode 郵便番号
Code コード
Name 名前
Id ID
Identifer 識別子

Kana カタカナ
Kanji 漢字

Corporation 法人
Company 会社
Group 集団
Member 構成員
Element 要素
Department部署
Position 役職


Branch 枝/支店
Bank 銀行
BankAccount 銀行口座
Transfer 転送
Send 送信/送る

Cost 費用
Profit

Key キー
KeyBoad
Db データベース
UI ユーザーインターフェース
GUI グラフィカルユーザーインターフェース

Theme テーマ
Dictionary 辞書
Style スタイル

Product プロダクト
UnitPrice 単価
Quantity 数量
Price 価格
Tax 税
ConsumptionTax 消費税
Taxin 税込み
Taxout 税抜き
TaxRate 税率

Account 勘定
Accounting 経理
Slip 伝票
Journal 仕訳
Debit 借方/債務
Credit 貸方/債権
Balance 貸借
BalanceSheet 貸借対照表

Rate 率
Percent パーセント
Payment 支払い

User ユーザー
Password パスワード
Setting 環境
Configuration 配置/構成

Login
Logout
Signin
Signout

Author 著者
Sign 署名する
Signature 署名

.Net Frameworkのソースコード

下記URLにて公開されており、ダウンロードすることが出来ます。

http://referencesource.microsoft.com/

中身を理解する必要はないけど.Net Frameworkで開発してる全ての人は一度でいいから目を通してみるべきだと思います。
カプセル化という概念の重要性が身に染みます。

c# enumをDictionaryのキーにした場合のパフォーマンス

3年以上の前の記事ですが、参考にさせていただき調べてみました。

proprogrammer.hatenadiary.jp

要約するとintへのキャストは高速だけどGetHashCodeの実装は低速とのこと。
あまり厳密なテストをしたわけではないですが、.Net Framework4.6の環境で試してみたら確かに一桁ほど差が出るようです。

これは頭の片隅に入れておきたい。

アダプターパターン

Gofデザインパターンの復習でアダプターパターンについて書きます。
書籍等で見ると最初は混乱したのですが、覚えるとデコレーターパターン同様、シンプルなパターンだと思います。

アダプターパターンとは

・ある型を別の型に適合させるパターン

アダプターパターンの構成

適合させたい型

・アダプターとなるクラスによって適合させる型、インターフェース推奨

    public interface ISample
    {
        void DoSomething();
    }

アダプター

・あるクラスを別のクラスに変換するためのクラス
・ラッパーとも言われる
・以下の例はstringをISampleインターフェースに適合させた場合

    public sealed class SampleAdapter : ISample
    {
        public SampleAdapter(string adaptee)
        {
            // 省略
        }

        public void DoSomething()
        {
            // 省略
        }
    }

使用例

    class Program
    {
        static void Main(string[] args)
        {
            new SampleAdapter("hoge").DoSomething();
        }
    }

アダプターパターンのメリット

・外部のライブラリや標準ライブラリを自作した型で抽象化するこで、ライブラリへの依存を軽減する
・異なる型を抽象的な型で同一視、抽象的な型に対するロジックを共有することが出来る

デコレーターパターン

Gofデザインパターンの一つ、デコレーターパターンについて復習します。
デコレーターパターンは比較的簡単で、デザインパターンの中で一番最初に覚えたパターンでした。
再利用しやすいコードを書く上で今でも欠かせないパターンだと思います。

デコレーターパターンとは

・デコレーターを日本語に訳すと「装飾者」
・ある型に対する拡張機能を同じ型で実装する

デコレーターパターンの構成

拡張する型の宣言

・デコレーターパターンで拡張機能を実装する型の宣言
・抽象クラスでも書けるがインターフェースの使用を推奨

    public interface ISample
    {
        void doSomething();
    }

装飾するクラス(デコレーター)

・デコレーターパターンで実装されたクラス
・コンストラクタで拡張する型を受け取る
・自身も拡張する型を実装する

    public sealed class SampleDecorator : ISample
    {
        public SampleDecorator(ISample decorated)
        {
            // 省略
        }
        public void doSomething()
        {
            // 省略
        }
    }

装飾されるクラス

・デコレーターのコンストラクタに渡されるクラス
・拡張対象の型を実装している
・デコレーター自身がデコレーターに渡されることもある

    public sealed class Sample : ISample
    {
        public void doSomething()
        {
            // 省略
        }
    }

使用例

    class Program
    {
        static void Main(string[] args)
        {
            new Sample().doSomething();
            new SampleDecorator(new Sample()).doSomething();
            new SampleDecorator(new SampleDecorator(new Sample())).doSomething();
        }
    }

デコレーターパターンのメリット

・既存のコードを変更せずに機能を追加することが出来る
・オープン・クローズドの原則の実現方法の一つ(拡張に対して開いていて、修正に対して閉じている)
・デコレーターを組み合わせ方を変えるだけで安全に機能のバリエーションを増やすことが出来る

プロジェクトの分離について

色んな書籍をみても、c#のプロジェクトやjavaのパッケージの分け方について深く言及しているものがあまり無い。

 

 

最近思うのは、プロジェクトやパッケージの分離方法の勘所を抑えていれば、自ずとメンテナンスが容易なシステムになるのではないかということ。

 

モデリングアーキテクチャに対する理解も必要だと思うのですが、個人の解釈次第なところが多いし、もっと具体的に、こういうクラスはこういう名前空間で、こうやってライブラリ分離します。そうするとこういうメリットやデメリットがありますよ。

 

こういう話題がもっと目についても良いと思っています。

 

今はまだ自習のなかでうっすら手応えを感じているレベルですが、この辺の考え方が上手くまとまれば設計の際に迷うことが無くなりそう。

 

 

 

C# 自作ライブラリの検討メモ

デザインパターンオブジェクト指向エクササイズの教材として自作ライブラリを作ろうと検討中。

名前空間についてメモ


Nmdm
 ⇒最上位の名前空間、ブログ名から

Nmdm.Pair
 ⇒ジェネリックインターフェースで二つのインスタンスのペアを表現

Nmdm.Collection
 ⇒IEnumerableを持つ拡張用インターフェース

Nmdm.Range
 ⇒ジェネリックインターフェースで型の範囲を表現

Nmdm.Comparer
 ⇒.NetのIComparer関連の拡張 インターフェースは不要

基本型を拡張する場合の名前空間(例:string)

Nmdm.String
 ⇒stringインスタンスを持つインターフェースIStringの宣言場所

Nmdm.String.Wrapper
 ⇒基本型のラッパー実装場所

Nmdm.String.Decorator
 ⇒単一のstring型インスタンスで成立する処理をデコレーターパターンで記述、IStringを返す。
  ToWide、ToNarrow、ToUpper 等

Nmdm.String.Comparer
 ⇒IComparerの実装場所

Nmdm.String.Adapter.Length
 ⇒(変換元の型).Adapter.(変換先の型)のルールで変換ロジックをアダプターパターンで記述


Pair、Collection、Rangeなど汎用的なデータ構造は型名の後に名前空間を入れる。
Nmdm.Int.Pair.Adapter.〇〇
 ⇒IPairに関する実装

Nmdm.Int.Range.Decorator.〇〇
 ⇒IRangeに関する実装



基本ルール
・完全コンストラクタパターン
・メソッドをアダプタパターンまたはデコレーターパターンで分離、ミックスインにする。
・処理を実装する箇所では全てのメンバーを使う。
・LengthやCount、Year、Monthといった用途が定まりそうなものは別途インターフェースを設け、IIntなどより抽象的な型に依存させる。