質問: new SendMail(); sendmail.Send(address, "メール本文"); ``` のように、sendmailの引数に、新設したMailAddressクラスを渡す必要が出てきます。 こうすると、B(SendMail)からC(MailAddress)を分離するだけでなく、UIからSendMailを呼び出している部分すべてを改変する必要が出てきます。それはちょっと手間だなぁと考えています。 こういうリファクタリングって、どのようにするものでしょうか? クラスを分離するのだから、UIから呼び出している部分もすべて改良すべきでしょうか? ご意見賜りたく。 ### 補足情報(言語/FW/ツール等のバージョンなど) Microsoft Visual Studio Community 2017 Version 15.0.26228.9 D15RTWSVC Microsoft .NET Framework Version 4.6.01586 です。 よろしくお願いします。
回答: こんにちは。 リファクタリングは暫定修正が積み重なった時や当初付けていた名前が不適切になって変更した方が好ましいような時に、プログラムの見通しをよくすることを目的に行う作業と思います。 お悩みの機能は、sendmailクラスが持つ機能として宛先名で送信先を指定するべきか、メールアドレスで指定するべきかですね。現在前者の状態で後者を選択することでプログラム全体の見通しがよくなりますでしょうか? 既に把握されているようにsendmailを呼び出している箇所全てをわずかとは言えより複雑になる方向へ修正が必要ですね。そして、私にはそれにより「プログラム全体の見通しがよくなる」ようには思えないです。 しかも、同じことを何度も書くことになるのでDRY原則にも反します。 > > ふと、メールアドレスの管理のみを別立てのクラスに分離にすれば、UIでメールアドレス管理しやすいかもと考えたのです。 > > > その通りですね。そのメールアドレスを管理するUIをaとした時、A-B-C/a-Cと呼び出せば良いと思います。