達人プログラマー 第2章
二重化の過ち
DRY(Don't Repeat Yourself)原則(繰り返しを避けること)
「すべての知識はシステム内において、単一、かつ明確な、そして信頼できる表現になっていなければならない。」
- DRY原則に従うことにより、信頼性の高いソフトウェアを開発して、開発そのものを簡単に理解したりメンテナンスできるようになる。
DRY原則を破る
⇒同じ知識を2か所以上に記述すること。
二重化の発生原因
- やむをえない二重化
- 不慮の二重化
- 手抜きによる二重化
- 開発者間の二重化
直行性
直行性とは、簡単に設計、製造、テスト、拡張できるシステムを構築する場合に必要となる重要な概念。グラフの座標軸をイメージ。
ある種の独立性、分離性を表す。2つ以上のものごとで、片方を変更しても他方に影響を与えない場合、直行しているといえる。
直行していないシステムの例
ヘリコプター
⇒操作が複雑
直行することの利点
生産性の向上
- 変更が局所化されるため、開発期間とテスト期間を短縮させることができる
- 直行性を考慮したアプローチによって再利用も促進される。システム間の結合が疎であればあるほど、再編成や再作成が簡単。
- 直行しているコンポーネントを組み合わせることによって、生産性の向上が見込める。M × N 種類
リスクの削減
- コードの問題発生部分を隔離できる。
- 検証しやすい
- 特定ベンダー、製品、プラットフォームと強く無図日ついてしまうようなことが無くなる
コーディング
コーディングを行うたびに、意図せずほかのモジュールの中にある昨日を重複させたり既存の知識を重複表現してしまうかもしれない。
直行性を維持するためには?
- コードの結合度を最小化する。オブジェクトの状態を変更する必要があるのであれば、それをオブジェクト自身にさせる。
- グローバル・データを避ける
- 類似機能のリファクタリング
メモ
オブジェクトのアトリビュートを読み書きする際は、可能な限りアクセッサー・メソッドを使用する
数値を右、左詰め、0埋めする方法
右詰め、左詰めする場合、StringクラスのFormatメソッド、PadLeftメソッドを使用する。
指定する書式 | 書式指定項目の記述例 | 出力例 | |
幅指定で右詰め | String.Format("{0, 4}", num) | “___1” | |
≂ | String.PadLeft (4) | "___1" | |
幅指定で左詰め | String.Format("{0, -4}", num) | “1___” |
0埋めする場合、StringクラスのPadLeftメソッドを使用
指定する書式 | 書式指定項目の記述例 | 出力例 |
幅指定で右寄せ0埋め | String.PadLeft (4, "0"c) | "0001" |
PadLeftメソッドでいいですね。
「つまみぐい勉強法」をつまみぐい
問題の解決方法のステップ
- どういう問題があったか?
- どうやって問題の個所を特定したのか?
- どうやって修正方法を特定したのか?
この3ステップを踏むと解決への時間が大幅に短縮される。
質問の仕方
質問する前に現状を把握する。
- 具体的にどんな作業をしたか?
⇒問題に至るまでの過程。問題が起こったらまずスクリーンショットを撮るなどすると説明しやすい。
- その結果、どういう状態になったのか?
⇒現状の結果を整理
- 本来、どういう状態になりたかったのか?
⇒自分が目指していた状態
- そもそも、何をしたかったのか?
⇒目的の整理
わかってはいますが、中々ここまで細分化出来ていませんね。
事実か判断か
事実か判断かの認識がぶれると、後々に影響を与える。
⇒具体的な事実で検討して回避する。数値をで求めたり実際に体感してもらったり。
まとめ
前半は勉強方法。後半は勉強会のお話が中心。個人的にもこの本が書いていることと同じように、2つ3つやることを決めてサイクルで勉強しているので勉強方法に関しては新たな発見はそこまでありませんでした。
勉強会のお話も一般的によく言われているようなことが書かれてありました。((闇雲に)参加するだけではダメだよ等)
兎にも角にも、勉強しましょう。
Excel VBAで.NET(C#,VB)で作成したDLLを使用する方法
実行環境
OS : Windows Server 2003,Windows 7
Excel: Excel2003
準備
①C# or VB.NETでDLLを作成。(Test.dll)
②DLLをレジストリに登録し、DLLのタイプライブラリを作成する。
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe /tlb Test.dll
ここで「RegAsmは有効なWin32〜ではありません。」とエラーが表示された場合、RegAsm.exeが壊れている可能性がある。(ファイルサイズが0KB)
その際は他マシンからコピペで上記のフォルダに入れる。
③作成したタイプライブラリをVBAの「参照設定」から追加する。
「ツール」→「参照設定」
作成したタイプライブラリを追加するだけでは動かない場合、以下の参照可能なライブラリファイルも追加する。
- COM + 1.0 Admin Type Library
- COM AddIn
- COM+ Services Type Library
VBAでの使用方法
Import System Public Class Test Public Sub TestMethod() MsgBox("メソッドが呼び出されました。") Eun Sub End Class
' ダイナミックリンクライブラリ(DLL)の外部プロシージャへの参照を宣言します。 Public Declare Sub TestMethod Lib "Test.dll" () Sub CreateTestObject() ' オブジェクト作成 ' 名前空間を忘れがちなので気を付ける ' これでTestクラスのメソッドが使用可能になる Set QrObj = CreateObject("System.Test") End Sub ' メソッド使用 Sub VBATest() QrObj.TestMethod() End Sub
Visual Studioのセットアップ プロジェクトで作成したインストーラで作成されたショートカットファイルを実行するとインストールが始まる。
タイトルのような現象にハマりました。
解決までに得た情報を纏めます。
なぜエラーなくインストールが完了したのにショートカットを実行するとまたインストールが始まるのか?
Windows Installerで作成したインストーラには、自動修復機能というものがあり、インストール中に何かしら問題があるとこの機能が働くようです。
今回の場合、ファイルシステムに入れていたファイルをインストール中に削除してしまう処理を書いていたため、自動修復機能が働いていました。
仕様変更の際、この処理を削除するのを忘れていたというオチでした…。
セットアッププロジェクトで作成されたショートカットファイルは、アドバタイズショートカット
アドバタイズショートカットについては、下記を参照。
Visual Studio 2005/2008のセットアップ機能で作成したショートカットは「アドバタイズショートカット」となり、出来ない操作がある 【▲→川俣晶の縁側→ソフトウェア→技術雑記】
今回の直接的な原因ではありませんが(?)、このショートカットファイルがアドバタイズショートカットなため、意図しない状況で修復インストールが動いてしまったりするみたいです。
アドバタイズショートカットだと色々弊害があり、出来れば普通のショートカットに修正した方がいいかもしれませんね。
普通のショートカットにする方法は、Orcaを使用すると出来るみたいですが、
このような便利なスクリプトを書いた方もいらっしゃいます。
机の上よりましでしょう:msiのプロパティを書き換える - livedoor Blog(ブログ)