あなたのクラスをよく命名闘争?


今まで自分の頭の傷を見つけるときに、その新しいクラスの名前を疑問に思いますか?
我々は、これですべての闘争!
事実、it's one of the two hardest parts of programming!
あなたが心の中で明確なビジネスコンセプトを持っているので、時にはそれは簡単です.
他の回は、必ずしもビジネスコンセプトに関連付けられていないクラスを作成することがあります.
クラスをいくつかのクラス(保守性のために)に分割することを決定するかもしれません.
または、デザインパターンを使用する必要があります.
🤦‍♂️

ヒントを救出する!


通常、コードを書くのは、解決しようとしている特定のシナリオを含んでいます.これらの種類のビジネスシナリオに取り組むためのいくつかのヒントもあります.
  • できるだけ具体的にしてください!
  • 最初は冗長であることを恐れるな.後でリファクタできます.
  • あなたのビジネスプロセスを非プログラマに説明する記事のアウトラインを記述していることを前提にしてみてください.これからの条件で物事を命名して起動します.

  • ここでは、チップ1のチップを使用したサンプルは次のようになります.

    Once an order is submitted by the customer, we need to make sure that all the order's items are in stock. If some are not in stock, then we need to send them an email to let them know what items are on back-order.

    Next, we will pass the information to the shipping department for further handling.


    この説明を使用して名詞からいくつかのクラスを作成できます.場合によっては、コードを整理する方法に応じて、それはあまりにも形容詞を使用して非常に価値がある!
  • Order or SubmittedOrder
  • Customer or OrderCustomer
  • OrderItems
  • OrderItemsOnBackOrderEmail
  • ShippingDepartmentOrderHandler
  • 名詞/用語がすべて特定の文脈に適用可能であることに留意してくださいbounded contexts from DDD ) あなたは解決しようとしている.
    最初に渡したコードは次のようになります.
    class OrderSubmittedHandler {
    
        public async handle(order: Order, customer: Customer) {
            const submitted: SubmittedOrder = order.submitOrder();
    
            if(submitted.hasItemsOnBackOrder()) {
                const mail = new OrderItemsOnBackOrder(submitted);
                mail.sendTo(customer);
                await this._mailer.send(mail);
            }
    
            const shipping = new ShippingDepartmentOrderHandler(submitted);
            await shipping.sendOrderInfo();
        }
    
    }
    
    興味のポイント
  • 私たちが明示的に遷移をモデル化することに注意してくださいOrderSubmittedOrder . 以来SubmittedOrder は、Order , これはあなたのクラスの方法を小さくし、管理することによってSingle Responsibility Principle .
  • このようなクロスカッティングオブジェクトを導入しました_mailer 変数.この例では、依存性注入を使用してMailer . しかし、それはあなたが後にリファクタリングすることを決める何かでありえます.
  • シナリオ全体は、新しいクラスとして意味のある名詞によってキャプチャされます!
    もちろん、これは事実の後にリファクタリングすることができます.しかし、最初のパスとして、このテクニックは本当に物事の名前とどのように相互作用する必要があります固化することができます.
  • 冗長であることは、実際によく働きます!
  • 疑似コードを使用して、より多くのヒントについては、この偉大な記事をチェックアウト:


    いくつかのガイドライン


    ビジネスシナリオから明らかでないかもしれないか、明白でないかもしれないクラスの特定の種類に対処するとき、あなたを助けるかもしれない若干のガイドラインは、ここにあります.
    たとえば、デザインパターンを導入する必要があります.あなたのクラスの名前は?
    意図
    フォーミュラ

    認可Can{Entity}{Action} CanAdminViewThisPage , CanManagerUpdateUserInfo検証Is{Target}{State}{Test} IsAddressUpdateAllowed , IsUserCreationValidインターフェースICan{Action} ICanSendMail , ICanBeValidatedコンクリート事業コンセプト
    「何?」(名詞+形容詞)Student , EmployeeUserProfile , ShippingAddressユースケース{Action}{Target} ApproveOrder , SendWelcomeEmailデザインパターン{Name}{Pattern} IShippingAddressStrategy , HomeAddressStrategy , TemporaryAddressStrategy

    連絡を取り合う


    忘れないでください.


  • また、私のウェブサイトで私を見つけることができますwww.jamesmichaelhickey.com .

    あなたのソフトウェア開発経歴会報を動かすこと


    あなたがソフトウェア開発者としてあなたの経歴でレベルを上げるのを援助する電子メール会報!エバーワンダー
    ✔ ソフトウェア開発者の一般的な段階は?
    ✔ どのように、私はどのステージを知っていますか?どうやって次のステージに行けますか?
    ✔ どのような技術リーダーとどのように1つになるのですか?
    ✔ 私と一緒に歩いて、私の質問に答えてくれる人はいますか?
    面白いですか?Join the community!