私は SICP に取り組んでおり、Code Complete を少し読んでいます。Code Complete では、物事を可能な限り抽象化して構造化することを学びました。SICP では、1 つに抽象化できるすべてのタスクに対して「ヘルパー」関数を作成する方法を学びました。とにかく、私の問題: クラス「A」があり、タスク「b」、タスク「c」、およびタスク「d」を実行できるはずです。そこで、"b"、"c"、"d" の 3 つのメソッドを作成します。A.findEmployee('Steve')
これらのメソッドのそれぞれが実行しなければならないタスクはかなり複雑ですが、クラスや他のコードが提供する抽象化のレベルに適合します (たとえば、クラスはデータベース アクセスを抽象化し、リストやその他の低レベルのデータ型を返すのではなく、、Employee インスタンスを返します)。findEmployee メソッドは、私の意見では)同様にさまざまな部分に分けられます。たとえば、2 つの関数を呼び出すことができます。fetchEmployeeData('Steve')
、およびreturnEmployeeInstance(employeedata)
。しかし、次のように、これらすべての関数をクラスに入れるだけです。
class EmployeeDB(object):
def findEmployee(self,name):
employeedata=self._fetchEmployeeData(name)
employeeinstance=self._returnEmployeeInstance(employeedata)
return employeeinstance
def _fetchEmployeeData(self,name):
pass
def _returnEmployeeInstance(self,employeedata):
pass
構造化がはるかに少なくなり、結束の改善には実際には役立ちません。このような場合、コードを構成する適切な方法は何ですか?
御時間ありがとうございます。
編集:次のようにできることに気付きました:
class EmployeeDB(object):
def findEmployee(self,name):
def fetchEmployeeData(name):
pass
def returnEmployeeInstance(employeedata):
pass
employeedata=fetchEmployeeData(name)
employeeinstance=returnEmployeeInstance(employeedata)
return employeeinstance
それはサブ関数をうまく隠し、かなり見栄えがしますが、どのコードでもこれを目にすることはめったにないので、それが正しい方法であるかどうかはわかりません. どう思いますか?