Ruby、Python、PHPはSpringなしでどのように管理しますか?


13

エンタープライズJavaアプリケーションとWebサービスを職場で書いています(Spring、Hibernate、Maven、RESTEasy)およびPHP(CakePHP)とPython(Django)で、サイドプロジェクト用の。

SpringがもたらすInversion of ControlやAspect Oriented Programmingなどがもたらす価値はありますが、Javaスタックにない大規模なWebアプリケーションがSpringのようなフレームワークなしでどのように管理されるかはわかりません。

だから、開発者は、Springが排除するか、何か不足している密結合コンポーネントと他の不満を「我慢する」必要がありますか?

Springに慣れていない人のために、最もよく使用する機能は次のとおりです。

  • コントロールコンテナの反転:アプリケーションコンポーネントの構成とJavaオブジェクトのライフサイクル管理、

  • アスペクト指向プログラミング:横断的なルーチンの実装を可能にし、

  • トランザクション管理:いくつかのトランザクション管理APIを統合し、Javaオブジェクトのトランザクションを調整します。


3
Springの機能を少なくとも簡単に説明すれば、おそらくより良い答えが得られるでしょう。
ペルヨハンソン

4
PythonistaがJavaの流行語を使用していないからといって、設計パターンが大きく異なるというわけではありません。まあ、多分、損失の少ない膨張を除いて。
バルテック

6
あなたの定義でさえ、私はまだSpringが何をするのか全く全く分かりません。
sevenseacat

そして、それは私がSpringで抱えている最大の不満の1つです。Javaエンタープライズ開発を始める前は、その必要はありませんでした。
rdasxy

私はJava開発者ですが、その複雑さのために、春が本当に嫌いです。
マフムードホッサム

回答:


15

他のプラットフォームでは、これらの言語はJavaほど制限されていないため、Springは必要ありません。

node.jsを使用して例を示します

  • コントロールコンテナの反転:アプリケーションコンポーネントの構成とJavaオブジェクトのライフサイクル管理

サーバーの構成は、コードまたは単純なjson configファイルで行われます。汎用IoCシステムに関しては、Javascriptは表現力豊かで動的な言語であるため、必要ありません。はい、IoCが必要ですが、それは簡単です。関数パラメーターとしてオブジェクトに依存関係を渡します。

  • アスペクト指向プログラミング:横断的なルーチンの実装を可能にします

このようなものが必要だとは思わない、モジュール式のコードを書くだけでうまくいく。

  • トランザクション管理:いくつかのトランザクション管理APIを統合し、Javaオブジェクトのトランザクションを調整します

noSQLは非常に人気があります。トランザクションの概念はありません。

個人的には、そのようなシステムは肥大化しており、過剰に設計されているため、必要ないだけです。他の言語とプラットフォームは、無駄のない俊敏性を維持します。


8
また、アヒルのタイピングとモンキーパッチを使用してPythonとRubyにデータを注入するのがいかに簡単かを見逃しています。
ダニーステープル

3
確かに、他の言語にSpringがない理由は、...実際に有用であるためにSpringを必要としないためです;
ディーンハーディング

7
IoC、AOP、またはトランザクション管理は必要ないと言うのは、近視眼的で間違っています。多くの高レベル言語では、AOPおよび/またはIoC設計原則を使用して簡単にコードを記述できます。ほとんどの高レベル言語では、これらの機能を提供するために明示的なクラスやコンテナは必要ありません。
dietbuddha

2
@Raynos 汎用IoCシステムに関しては、単にそれらを必要としません。javascript は表現力豊かで動的な言語です。これはある程度の誤報です。あなたはそれらを必要思わない。coffeescripter.com/2010/08/...
アーロンMcIver

4
@AaronMcIverあなたが正しかったなら、IoCが必要です。
レイノス

15

ほとんどの高レベル言語では、AOPやIoCの設計原則を使用して記述するのは簡単です。

AOPを実装するために必要なのは、言語が高階関数をサポートすることだけです。例えば:

def log(fn):
  def wrapped_fn(*a, **kw):
    logger.log(fn_formatter(fn, a, kw))
    return fn(*a, **kw)
  return wrapped_fn

@log
def do_something(my_friend):
  return have_fun_with(my_friend)

プログラミング時には、一般的なIoCまたは依存性注入の原則に従うこともできます。その機能を提供するために特定のコンテナは必要ありません。そのようにコードを書くことができます。

def etl(iextract, transformations, iload):
  return iload(itertools.imap(compose(*transformations), iextract()))

9

さて、PythonはSpringもSpring Pythonも楽しんでいます

SpringフレームワークはJava開発を容易にするために作成されたものであり、Java開発に当てはまることは、RubyまたはPython開発に当てはまる必要はありません。

たとえば、Rubyにはメタプログラミング機能があるため、独自のAOPを作成できます。

皮肉なことに、新しいJava WebフレームワークはDjangoおよびRailsフレームワークをキャッチしようとしています(たとえば、Grails and Play!フレームワークを参照)。


4
GrailsはJavaフレームワークではありません。これはGroovyフレームワークです。GroovyはJavaバイトコードにコンパイルされますが、Javaではありません。
ケビンクライン

@kevinclineええ、私は知っていましたが、結局のところ、それはJVM Webフレームワーク(SpringとHibernate上に構築された)です。
Chiron

1
うん、Grailsのすばらしいところは、Springを知る必要がないことです。
ケビンクライン

1
@kevincline必ずしも真実ではありません。時には、あなたはここに春と微調整のものにフォールバックする必要があり、そこに
カイロン

3

Pythonの場合、BlueBream(別名Zope 3)はSpringの機能などを提供します。

複雑さとパワーにはコストがかかります。支払いたくない場合があります。

多くのプログラマーは、BlueBreamが困難であり、必要なことをやりすぎていることに気づき、よりスリムで小さなツールキットを好みます。他のほとんどのソリューション(Djangoなど)は、MVCパラダイムに基づいています。

美しいPlayframeworkのようなもので、Javaスペースでも同様の力が作用しているのを見ることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.