|

エンジニアの考え方を理解する

ソフトウェア エンジニアがコードの一部を見るとき、最初に自問するのは、「それは何をしているのか?」ということです。 次の質問は「なぜそれを行うのか?」です。 実はこの二人の間には深いつながりがあるのです―― なぜ になる 次の抽象レベルで。 あれは、 何が、そしてなぜ、抽象化の境界を越えて互いの鏡となるのか。 これを理解すると、エンジニアがより保守しやすく読みやすいソフトウェアを作成するのに役立ちます。
例は、上記の原理を説明するのに役立ちます。 Django Web アプリを開発していて、しばらくログインしていないユーザーに Web アプリの素晴らしさを思い出させたいとします。 次のコードがあるとします。

def remember_users_we_are_awesome(): users = User.objects.filter( last_login__lte=timezone.now() - timedelta(days=7), last_login__gte=timezone.now() - timedelta(days=14) ) ユーザーの u: message = EmailMessage( subject='この Web サイトは素晴らしい', message='あなたは完全に見逃しています', from='from@example.com', to=user.email, ) message.send()

このコードは何をしているのでしょうか? まず、データベース クエリを実行します。 なぜ? えー、結果を反復処理して電子メール メッセージを作成しているようです。 理由は不明です。
What と Why の間に明確な分離がなく、Why が What になる明確な点がないため、このコードは抽象化レベルを混同していることがわかります。 代わりにこのコードを見ると、次のようになります。

class UserQuerySet(models.QuerySet): def idle(): return self.filter( last_login__lte=timezone.now() - timedelta(days=7), last_login__gte=timezone.now() - timedelta(days=14) )

このコードは何をしているのでしょうか? データベースクエリを実行しています。 なぜ? メソッド名からわかることは、アイドル状態のユーザーを取得するためです。 次に、次のレベルを見てみましょう。  

def remember_users_we_are_awesome(): User.objects.idle() の u の場合: send_reminder_email(u)

そのコードは何をしているのでしょうか? アイドル状態のユーザーをリストしています。 なぜ? リマインダーメールを送信するため。 どのように なぜ 以前の回答は 現在 – 前のレベルではデータベース クエリが見られました。 このレベルでは、アイドル状態のユーザーが存在します。 そうすることで、抽象化の境界を越えたこと、つまり、何が、なぜ入れ替わったのかを知ることができます。 これらのコンセプトには素晴らしい対称性があります。
このコードは再利用性も高くなります。 コンセプトをしっかりと打ち出してきましたが、 アイドル、これはアイドル状態のユーザーを調べるときにいつでも使用できます。
この「what/why」フレームワークを使用してメソッドを作成すると、それぞれのメソッド名がわかります。 なぜ メソッドはその本体内で処理を行っています。 ただし、各メソッドは他のメソッドで構成されていることに注意してください。 これらのメソッドがこのルールに従っている場合、最終的には下位のメソッドの目標をカプセル化した一連のステートメントが作成されます。 これにより、一目瞭然のコードベースが得られます。 開発者は、コードを読み進めるためにコンピュータの動作のメンタル モデルを保持する必要がなくなります。 彼らは、次のような意味のある精神的シンボルを使用することができます。 アイドル 上記のコンセプト。 これにより、認知負荷が軽減され、コードを変更して新しい機能を記述するための開発作業が軽減されます。
このメソッドの分離は次のようになります。 サンディ・メッツの5ラインメソッドルール、ここでは 5 行以下のメソッドに限定します。 短いメソッドを使用すると、開発者は各アクションをカプセル化して構成する必要があります。 ここでの観察について なぜ & このような短いメソッドがなぜ役立つのかについて、アニメーション理論を提供できれば幸いです。

著者

  • Adam McKenzie

    アダムは CTO として、HPC チームとカスタマー サクセス チームの管理を担当しています。 アダムはボーイングでキャリアをスタートし、787 年間 XNUMX に取り組み、主翼の設計、分析、最適化を行う構造およびソフトウェア エンジニアリング プロジェクトを管理しました。 アダムはオレゴン州立大学で機械工学の学士号を優秀な成績で取得しています。

類似の投稿