web-dev-qa-db-ja.com

自動コードジェネレーター

私の同僚の1人は、自動コードジェネレーターを使用することを好みます。自動コードジェネレーターは、文書化が不十分で維持が非常に難しい大量のコードを作成します。

作成までの時間を短縮するために、コードジェネレーターを使用するコストは、メンテナンスの面倒な価値がありますか?

13
Mumbles

それを言い換えましょう:

優れた自動コード生成プログラムのコストはそれだけの価値がありますか?

はい。

貧弱な自動コードジェネレーターのコストは、他のすべての人にとってより多くの仕事を生み出しますが、それは著者にとって価値がありますか?

絶対違う。貧弱なコードの言い訳はありません。誰かが賢くなり、自動コード生成を使用したい場合、生成されたコードが適切なコードであることを確認するために時間をかける必要があります。そうでなければ、それの意味は何ですか?それは負担を乗り越えさせるだけであり、コードの生産に関しては、それを書いた開発者が負担するべきです。

10
wheaties

ジェネレータによって生成されたコードは、手動で保守することはできません。変更する必要がある場合は、ジェネレーターやその設定を調整して、再度実行する必要があります。それを考えると、生成メカニズム自体が非常に明確である限り、結果のコードが理解不能で文書化されていなくても問題ありません。 (コードが生成されたこと、ジェネレーターの場所とコードがどのように機能するかを必ず文書化してください。)

類推:私のコンピューターのプロセッサは常にマシンコードを実行していますが、高級言語とコンパイラーを使用してそのマシンコードを作成する方法を知っていれば、それについて何も知る必要はありません。 GCCが劣ったマシンコードを生成することもあると聞いていますが、完全に機能する限り、問題ありません。データベースアブストラクションレイヤーは、DBエンジンで動作するSQLを生成しますが、アブストラクションレイヤーが明確で機能している限り、SQLがどのように見えるかを誰が気にしますか?

コードジェネレーターを適切に使用すると、作成だけでなくメンテナンスコストも確実に節約できます。

23
Joonas Pulakka

コードジェネレーターはコンパイラーの一種です。コンパイラの出力がどれほどきれいであるかを気にする必要はありません。ソースコードを操作するだけです。多くの場合、それを使用して出力を手動で変更することは、人間が理解できる形式で最初から出力を書き込むよりも難しく、多くの作業を行わないとコードジェネレーターを再び使用できません。同じ不可解なコードへの同じ変更を正確に。

したがって、それらがビルドプロセスの一部であり、そのように文書化されている場合は問題ありません。ジェネレータへの入力はソースコードであり、ジェネレータが生成するものはすべて中間結果であり、いじられることはありません。

しかし、誰かがソースとして使用されるはずの理解できないコードを生成するためにそれを使用している場合、その人は悪いコードを生成しています。その人が機械的にまたは手動で不良コードを生成しているかどうかは関係ありません。それは依然として不良コードであり、それでもまだ品質の問題があります。

したがって、これを他の開発者と同じように扱い、悪いコードを書く必要があります。お店でどう扱っているのかわかりません。

6
David Thornley

他の回答のコメントから、コードジェネレーター自体ではなく、チームの標準について質問しているようです。

コード生成ツールをプロジェクトに含め、(適切な場合)ビルドプロセスの一部にする必要があります。例として、ビルド時にデータベースオブジェクトからクラスを生成するSubsonic 2.2を使用するチームが挙げられます。

これを行うexeは、プロジェクトの一部としてSVNにチェックインされるため、チームの新しいメンバーは、svnから新しいプロジェクトを取得し、これらのデータベースクラスがどこから来たのかわからなくてもすぐにビルドできます(この例では、生成されたコードをsvnに含めないでください)。