タグ付けされた質問 「software-craftsmanship」

14
何を優先すべきか:YAGNIまたはGood Design?
YAGNIはどの時点で適切なコーディング慣行に優先する必要がありますか?私は職場でプロジェクトに取り組んでおり、同僚に良いコード標準をゆっくりと導入したいと思っています(現在は存在せず、すべてが韻や理由なしでハッキングされています)が、一連のクラスを作成した後(私たちはTDD、または悲しいことにどんな種類のユニットテストもしないでください)私は一歩後退し、YAGNIに違反していると思いました。なぜなら、これらのクラスのいくつかを拡張する必要がないことを確信して知っているからです。 具体的な例を次に示します。一連のストアドプロシージャをラップするデータアクセスレイヤーがあり、基本的なCRUD機能を備えた基本的なリポジトリスタイルのパターンを使用しています。すべてのリポジトリクラスに必要なメソッドがいくつかあるので、リポジトリ用の汎用インターフェイスを作成しましたIRepository。ただし、その後、各タイプのリポジトリ(例:)に「マーカー」インターフェース(つまり、新しい機能を追加しないインターフェースICustomerRepository)を作成し、具象クラスがそれを実装します。ファクトリー実装でも同じことを行い、ストアドプロシージャによって返されたDataReaders / DataSetsからビジネスオブジェクトを構築しました。リポジトリクラスの署名は次のようになります。 public class CustomerRepository : ICustomerRepository { ICustomerFactory factory = null; public CustomerRepository() : this(new CustomerFactory() { } public CustomerRepository(ICustomerFactory factory) { this.factory = factory; } public Customer Find(int customerID) { // data access stuff here return factory.Build(ds.Tables[0].Rows[0]); } } ここでの私の懸念は、YAGNIに違反しているということです。99%の確実性でCustomerFactory、このリポジトリに具体的なもの以外のものを提供する理由がないことを知っているからです。ユニットテストがないため、MockCustomerFactory同じようなものは必要ありません。また、非常に多くのインターフェイスがあると、同僚が混乱する可能性があります。一方、工場の具体的な実装を使用することは、デザインの匂いのようです。 適切なソフトウェア設計とソリューションのオーバーアーキテクトとの間で妥協する良い方法はありますか?すべての「単一実装インターフェース」が必要なのか、または、例えば、基本インターフェースと単一のコンクリートのみを使用して、良いデザインを少し犠牲にして、プログラミングを心配しないのか疑問に思っています。実装が使用される場合のインターフェース。

4
ソフトウェアアーキテクトとして何をテーブルに持ち込むべきですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 StackOverflowおよびProgrammers SEでのソフトウェアアーキテクト(SA)の役割について、多くの質問があり、適切な回答があります。私はそれらよりも少し焦点を絞った質問をしようとしています。SAの定義は非常に広いため、この質問のためにSAを次のように定義します。 ソフトウェアアーキテクトは、プロジェクトの全体的な設計をガイドし、コーディング作業に関与し、コードレビューを実施し、使用するテクノロジを選択します。 言い換えれば、私は管理上の休息と、頂上(さらに押韻された言葉は省略された)タイプのSAについては話していない。何らかのSAポジションを追求する場合、コーディングから離れたくありません。クライアントやビジネスアナリストなどとのやり取りに時間を割くかもしれませんが、私はまだ技術的に関わっており、ミーティングで何が起こっているのかだけを知っているわけではありません。 これらの点を念頭に置いて、SAはテーブルに何をもたらすべきですか?彼らは「法を定める」(いわば)「特定のツール」の使用を「彼らのやり方」、つまりコーディングガイドライン、ソース管理、パターン、UML文書などに強制するという考え方で入るべきですか?または、彼らは最初の方向と戦略を指定してから、船の方向を修正するために必要に応じて元に戻して飛び込むべきですか? 組織によっては、これが機能しない場合があります。すべてを実施するためにTFSに依存するSAは、StarTeamのみを使用する雇用主で計画を実施するのに苦労する場合があります。同様に、SAはプロジェクトの段階に応じて柔軟である必要があります。新しいプロジェクトの場合は選択肢が多くなりますが、既存のプロジェクトでは選択肢が少なくなる可能性があります。 私の質問への回答がこれらの問題にいくらかの光を当てることを期待して、いくつかの背景を共有する方法として私が経験したいくつかのSAの物語があります: 私は、チームのすべてのコード行を文字通りコードレビューするSAと協力しました。SAは、プロジェクトだけでなく、組織内の他のプロジェクトに対してもこれを行います(これに費やされる時間を想像してください)。最初は特定の標準を実施することが有用でしたが、後にそれは不自由になりました。FxCopは、SAが問題を見つける方法でした。誤解しないでください。ジュニア開発者に教えて、選択したアプローチの結果を考えさせることは良い方法でしたが、上級開発者にとってはやや厳しいと見なされていました。 ある特定のSAは、特定のライブラリの使用に反対し、遅いと主張しました。これは、他のライブラリが多くの時間を節約するであろう一方で、物事を異なる方法で達成するために大量のコードを書くことを強制しました。プロジェクトの最終月に早送りすると、クライアントはパフォーマンスについて不満を言っていました。唯一の解決策は、開発者からの早期警告にもかかわらず、当初無視されていたアプローチを使用するように特定の機能を変更することでした。その時点までに、多くのコードが破棄され、再利用できなくなり、残業とストレスにつながりました。悲しいことに、このプロジェクトに使用された推定値は、私のプロジェクトが使用することを禁じていた古いアプローチに基づいていたため、推定の適切な指標ではありませんでした。首相が「これをやったことがある」と言うのを聞くでしょう すべてのプロジェクトでDTO、DO、BO、サービスレイヤーなどの使用を強制するSA。新しい開発者はこのアーキテクチャを学習する必要があり、SAは使用ガイドラインを徹底的に実施しました。ガイドラインに従うことが絶対に困難である場合、使用ガイドラインの例外が作成されました。SAはそのアプローチに基づいていました。DTOのクラスおよびすべてのCRUD操作はCodeSmithを介して生成され、データベーススキーマも同様のワックスボールでした。ただし、このセットアップをあらゆる場所で使用したため、SAはLINQ to SQLやEntity Frameworkなどの新しいテクノロジーに対してオープンではありませんでした。 私はこの記事を通気用のプラットフォームとして使用していません。上記のSAストーリーに関する私の経験には、プラス面とマイナス面がありました。私の質問は次のように要約されます: SAはテーブルに何をもたらすべきですか? 彼らは意思決定においてどのようにバランスを取ることができますか? 特定の基本ルールを実施しなければならないという考え方で、SAジョブ(前に定義したとおり)にアプローチする必要がありますか? 他に考慮すべきことはありますか? ありがとう!これらの仕事のタスクは、上級開発者や技術リーダーである人々に簡単に拡張できると思いますので、その能力についてもお気軽にお答えください。

9
JavaScriptマスタリーへの道は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、おそらく再開できると思われる場合は、ヘルプセンターをご覧くださいを。 7年前に閉鎖されました。 JavaScriptを使用して開始する方法を知っています。スニペットをカットアンドペーストして、クライアント側の機能または検証を少し行います。 しかし、リッチな対話型動作を実装しようとしてこのパスをたどると、泥だらけのビッグボールを作成していることに気付くのにそれほど時間がかかりません。 それでは、相互作用層のプログラミングにおける専門知識への道はどのようなものでしょうか?堅牢で保守可能なJavaScriptをプログラミングする能力に役立つ書籍、チュートリアル、演習、およびプロセスはどれですか? 私たちは皆、あらゆる努力において実践が重要であることを知っていますが、ここでの答えに似たパスを探しています:https : //stackoverflow.com/questions/2573135/

5
すべての開発者にコードレビューを行わせる
私は7-8人の開発者チームのソフトウェア開発者です。私たちは現在かなり長い間コードレビューを行っており、コードの品質は時間の経過とともに向上しています。 しかし、最近、一部の開発者が他の開発者よりも多くのコードレビューを求められていることに気付きました。私は彼らの柔軟な態度のためだと思います。 私の見解では、これはコードレビューの実施方法ではありません。すべてのチームがそれを説明し、コードレビュー担当者が変更を簡単に受け入れる意思があるために選ばれるべきではありません。 チームでこの問題にどのように対処しますか? コードレビュー担当者を選択するためのルールを確立しましたか? コードレビュー担当者は、(良い)コードレビューを行った時間に対して報われるべきだと思いますか?そして、彼らはどのように報われるべきですか? あなたの答え/アイデアをありがとう。

2
ゲッターとセッターを避け、ユーザー情報を表示する
バックグラウンド 私は「クリーンコードブック」を読んでいます。並行して、私は銀行口座などの体操のカタに取り組んでおり、そのルールに固執しています: 体操の9番目のルールは、ゲッターやセッターを使用しないことです。 とても楽しいようで、私はこの原則に同意します。さらに、作者はClean Codeの98〜99ページで、ゲッター/セッターが抽象化を壊し、オブジェクトに問い合わせる必要はないが、オブジェクトに通知する必要があると説明しています。 これは私の心の中で完全に理にかなっており、私はこの原則に完全に同意します。問題は実際に起こります。 環境 たとえば、一部のユーザーをリストし、ユーザーの詳細を表示する必要があるアプリケーションがあります。 私のユーザーは以下で構成されています: -> Name --> Firstname --> String --> Lastname --> String -> PostalAddress --> Street --> String --> PostalCode --> String 問題 どのように私は行うことができ、または私は私だけ(簡単な情報を表示する必要があるときゲッターを避けるために何ができると私はその特定のフィールドに余分な操作を必要としないことを確認する必要があり(単純でのFirstName値を表示します)ランダム)出力サポート? 頭に浮かぶのは 1つの解決策は、 user.getName().getFirstName().getStringValue() これは完全に恐ろしいことであり、体操の多くのルールを破り、デメテルの法則を破ります。 別のものは次のようなものです: String firstName = user.provideFirstnameForOutput(); // That would have called in the user object => …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.