今回は、新しい言語を学ぶ際に個人的にやっている、以下を作りましたので、
主に、その時の感想になります。
また、誤り等があった際には、ご指摘いただけると助かります。
https://github.com/kitoku-magic/user_registration_form/tree/sqlalchemy_raw/python
1.タイプヒント
mypyという、実行「前」に静的にチェックする道具はあるみたいですけど、
実行「時」に、エラーにはしてくれないみたいですね。
PHP7との比較ですが、この点は若干残念な気もしますね。
2.アクセス修飾子
privateはあるみたいですが、protectedはないみたいで。
あと、private変数も、比較的簡単にアクセスする抜け道があるみたいで。
PHPも、Reflectionとか使えばですけど、
でも「Reflection」で検索すれば、一発で分かりますからね(笑)
Pythonだと、構文的には正規表現で調べられるかどうかといった所でしょうか。
3.uWSGIの、ファイル修正後の再起動について
基本的には再起動してくれるみたいですけど、
シンタックスエラーが一度でも発生すると、
その後は、再起動してくれなくなるみたいですね。
これ、何とかならないんですかね・・・シンタックスエラーを起こさない?・・・それは無理です(笑)
4.SQLAlchemyにおける静的プリペアドステートメントなど
静的プリペア以外にも、大変な箇所は沢山(モデルクラスの継承関係を作ったりとか)あったんですが、
以下の実装をご覧の通り、O/Rマッパーを使っている意味があんまり(勿論あるのは確かですが)ないという残念な形に(苦笑)
特に、「repository.py」が顕著ですね。
「db.session」みたいな形で且つ、静的プリペアが出来れば、ベストなんですがね。
静的プリペアじゃなくても勿論良いんですけど、慣れているからっていうのと、
単にDBライブラリのテストの手間を減らしたかっただけですね。
と、特に印象に残った所を挙げました。
別にdisるつもりは無かったんですが、
少なくとも現時点(まだ始めたばかりですので)では、デメリットが目についてしまいましたね。
ただ、↑の点も単に知らないだけで、すぐにひっくり返る気もしますけど。
PHPとの比較は、むしろPHPが優れているんじゃないですかねコレ。
少なくとも、「PHPを避ける」は、特にVer7以降は殆ど考えなくて良いのではと。
あと、Flaskにしたのは、「マイクロ」フレームワークを触ってみたかったからですね。
実装量は勿論多くなりますけど、カスタマイズ性は高いのでPJ次第ですが選択の余地はあるかと。
あと、今後ですが上述の件以外ですと、特に以下辺りが改善点ですね。
1.importの仕組みが分かる様な分からない様な(あと、どうやって書くのがベストかとかも)
2.mypyに関連して、一部のクラス(Flaskのrequestクラスとか)がどうやってもタイプヒンティング出来ない点
3.基本的なデータ型の使い分けや、良い関数・悪い関数(どの言語にも多分あるでしょう?)の使い分け(要するにベストプラクティス)
【追記】4.DB(SQLAlchemy)のマスター・スレーブ対応
まぁ、以下はかなり参考になると思いましたけどね。
Pythonを書き始める前に見るべきTips - Qiita
また、ここまでで参考にしたサイトは・・・数え切れませんので、
Python関係のページを作成した皆さん全員に向けて、ありがとうございます。
ひとまずは、ここまでにします。