1:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:31:13.771 ID:7ASYLEH90.net

オブジェクト指向で設計する方法について語ってくれ
要件からクラスに分ける辺りの最初のほうについて特に意見を聞きたい



2:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:31:54.556 ID:bBdXiCZW0.net

おれも聞きたい

3:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:31:55.356 ID:Lam9WLCqa.net

デザインパティーン

5:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:34:47.077 ID:7ASYLEH90.net

>>3
デザインパターンで設計の中盤~後半だよね?

誰が設計してもある程度同じクラス設計になるべきだと思う


ER設計は正しい手順でやればある程度同じ設計になる
オブジェクトのクラス設計でも標準的な手法みたいなのはないんだろうか?

12:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:40:01.665 ID:N4Rlt87j0.net

自転車とおなじで慣れればどうってことないんだけど

6:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:35:01.681 ID:649qcxJq0.net

オブジェクト指向の設計って難しいの?

プラモ作るときとかさ、組み立てるのに必要なパーツがあるじゃん?それ一個ずつ定義するだけじゃん

んで何回もプラスチックで出来ているとか定義するの面倒だからさ、Aグループはプラスチックで出来ているって定義してそれ使い回すだけじゃん

俺のオブジェクト指向の考え方が間違ってるのかな?

8:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:36:59.932 ID:7ASYLEH90.net

>>6
そのパーツってどんな基準で決めるべきなのってこと
それが設計指針というか方針と言うか
そういうのがないと人によってばらばらになるし、いい部品にならない

9:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:37:32.221 ID:649qcxJq0.net

>>8
どんな状況での開発を想定してるの?

13:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:40:15.572 ID:7ASYLEH90.net

>>9
例えば2ちゃんをオブジェクト指向で設計したとすると
どういう手順でクラスに分けて行くべきだろう?

まず要件定義(ユースケースかな?)すると


スレを立てる
スレを一覧表示する
スレを読み込む
スレに書き込む

みたいになるよな


その次のステップをどうすべきだろう?

17:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:42:21.728 ID:yrlhwpnGM.net

じゃあ俺らでオブジェクト指向で第二の2chを作ろうか

19:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:43:36.621 ID:7ASYLEH90.net

>>17
いいね
このスレで具体的な設計まで落とせたらやろうか

10:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:38:14.484 ID:Y1FV07+90.net

クラスの役割を分担して拡張、修正を簡単にするもの

14:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:41:06.950 ID:7ASYLEH90.net

>>10
そうだよな
概論としては理解できるんだけど実際のシステムに適用するときの基準が
あんまりはっきりしない

11:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:39:09.454 ID:Lam9WLCqa.net

なに単位でクラスにするかだよな

14:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:41:06.950 ID:7ASYLEH90.net

>>11
そうだよな
概論としては理解できるんだけど実際のシステムに適用するときの基準が
あんまりはっきりしない

35:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:57:42.716 ID:16T8N5hB0.net

1操作対象1クラスとすればおk

例えば2chであれば、板・スレッド・レスは明らかに独立したクラスである


メ欄の内容で特殊効果を発生させる機能は、メ欄というレスクラスの一部のようには見えるが、
影響範囲が明らかにレスの範囲に止まらないので別クラスとすべき
恐らく、抽象特殊効果クラス、それを継承した個々の特殊効果クラスを作り、
メ欄をパースして個々の特殊効果クラスを生成するファクトリークラスを用意するのが「それっぽい」であろう
名前欄も同様
IPからIDを生成する機能は、「板ごとのID生成クラス」「IP、BE、メ欄等をID生成クラスに渡すクラス」に分離
名前欄も同様

モデル系は大体こんなところか


これにビューとかコントローラーがくっつく

48:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:07:24.670 ID:7ASYLEH90.net

>>35
レスを独立したクラスにすると膨大な数のオブジェクトが生成されることになる
それでもレスを独立したクラスにすべきなのか?とかそのあたりはどう考えるのがいいだろ

50:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:09:59.648 ID:16T8N5hB0.net

>>48
なんで膨大な数のオブジェクトが生成されるんだ?
高々1000オブジェクト程度だろう

54:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:13:27.569 ID:7ASYLEH90.net

>>50
何個スレがあると思ってるんだ?

55:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:14:06.414 ID:16T8N5hB0.net

>>54
一度に表示するのは最大で1000レスだろう
残りはDBに入ったままでオブジェクトにはならない

58:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:15:32.762 ID:7ASYLEH90.net

>>55
VIPでも500スレくらいはアクティブだろ…
過去ログとかもあるし

59:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:19:16.048 ID:16T8N5hB0.net

>>58
どこのURLにアクセスすると500スレッドを全部1ページに表示できるの?????

61:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:20:25.419 ID:7ASYLEH90.net

>>59
一度にアクセスするのは1ユーザじゃないんだが…
それにスレが参照するたびに数100オブジェクト生成するのか?
サーバでキャッシュしないの?

36:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 10:57:47.021 ID:649qcxJq0.net

お前が言ってるのは詳細設計フェイズの話なんだよ
考え方がプログラマーよりすぎ
もっとSEとして考えてみろ

44:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:03:50.688 ID:7Yz8P/Hs0.net

ユースケース作る前にDFD図作ろうぜ
機能の共通化もし易いしお前らが大好きな抽象クラスも上流工程で妄想し易い

51:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:12:53.299 ID:7ASYLEH90.net

>>44
そうなんだよなあ
オブジェクト指向設計でやる場合でもDFDとかERとかあると理解しやすい気がしてる
ERから作るべきクラスが見えてくるし

47:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:06:22.745 ID:S6T9npfb0.net

実装方法はどうでもいい

64:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:21:37.999 ID:9whmPTgK0.net

オブジェクトの量は別にどうでもいいと思うんだが
どちらかというと種類が問題な気がする

81:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:41:17.364 ID:7ASYLEH90.net

レベルの低い奴の書き込みは無視する

例えば2ちゃんをオブジェクト指向で設計したとすると


どういう手順でクラスに分けて行くべきだろう?

まず要件定義(ユースケースかな?)すると


スレを立てる
スレを一覧表示する
スレを読み込む
スレに書き込む

みたいになるよな


その次のステップをどうすべきだろう?

110:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 12:19:04.369 ID:70jg7NC2d.net

おれオブジェクト指向わからんけど要件定義の段階でパフォーマンスから考えるとかいってるやつが素人なのはわかる

111:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 12:21:15.052 ID:7ASYLEH90.net

>>110
設計には段階があるって言ったが
それと要件定義と設計の区別ができていないだろお前

113:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 12:25:12.861 ID:CqkCmK0J0.net

>>110
要件段階で非機能要件詰めないでどうやって機能設計するんだ?
クソスレが数万本あって同時接続数が100万超えるかもってなったらソフトウェアの作りが変わるだろ?
変わるとオブジェクトの作りやクラスの分割や機能配分も見直さないといけないだろ
戯けたことばっかり言ってるからお前は就活に失敗するクソ学生か下っ端クソPGにしかなれんのだよ

115:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 12:27:46.681 ID:FZtijhdf0.net

うるせー
フレームワーク構築時に居たマが余りにもレベル低くて
メソッドが全てパブリックで、それを修正することなく使ってた俺の前職場をディスるのはやめろ!

134:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 13:24:56.279 ID:pra2QImU0.net

俺がクラスを作ると一度しかインスタンス化されないクラスばかりで全然活かせてる気がしない

70:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:27:50.608 ID:5aUGtMmg0.net

オブジェクト指向って中々の規模じゃなきゃ使わないじゃん
これ言っちゃいかんのかもしれんけど、たかだか2chでオブジェクト指向使ったほうがコストとかサーバーへの負担デカいよね……
そもそも1レス1オブジェクトの必要なくてさ、ただ単にデータベースなりcsvなり何なりから呼び出すだけで終わっちゃうよね

63:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 11:21:27.301 ID:pMMKdiSL0.net

サーバとクライアントの話が混ざっている気がするが

1:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:15:41.315 ID:7ASYLEH90.net

Webアプリケーションで複数のユーザから参照されるオブジェクトがある場合に
それらを管理するための仕組みはどうするものなの
フレームワークってありそうだけど

3:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:17:08.612 ID:7ASYLEH90.net

例えばオンライン販売サイトで商品オブジェクトはすべてのユーザで共有するとか

6:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:35:39.271 ID:2uQqf8qd0.net

サーブレットやらアパッチやらは不揮発なデータ持てないし
ファイルに自分で書くならDBでいいし

8:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:37:11.990 ID:7ASYLEH90.net

>>6
毎回DBアクセスするのは非効率だから
DBから読み込んだオブジェクトを共有するってイメージ

7:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:35:57.478 ID:7ASYLEH90.net

予想外に高度な使い方なのか?
普通にフレームワークがあるのかと思ってた

9:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:39:37.074 ID:2uQqf8qd0.net

キャッシュサーバーとかmemcachedとかあるじゃん

10:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:42:32.296 ID:7ASYLEH90.net

>>9
キャッシュサーバーはページをキャッシュするサーバのこと指してる?

memcachedは初めて聞いた


データベースの前に置かれるイメージなの?
オブジェクトもキャッシュできるんだろうか?

11:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:46:17.738 ID:NBJyzFHYa.net

オブジェクト自体は多重起動してデータはmemcacheから読み出せば?って意味じゃね?

12:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:48:55.388 ID:9PyWtMI00.net

static変数に入れておくという方法も

14:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:51:21.090 ID:7ASYLEH90.net

>>12
全体で500MBを超えたら古いオブジェクトは破棄するみたいな管理もしたい

18:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:55:13.006 ID:oaACLH+kK.net

>>14
もちろんデータサイズのスレッショルドやらでガベージコレクタ走らせるような実装もある

20:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:57:13.280 ID:7ASYLEH90.net

>>18
その実装ってフレームワークみたいな形でオープンソース化されてるものはない?

24:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:59:24.987 ID:oaACLH+kK.net

>>20
俺は仕事でJBosscacheくらいしか触ってないが
探せばわりと色々あるはず

26:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 20:01:24.644 ID:7ASYLEH90.net

>>24
アプリケーションサーバの機能あるいはアドオンとして提供されるのかな?
Tomcatでもあるか探してみる

29:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 20:04:04.739 ID:oaACLH+kK.net

>>26
tomcatはサーブレットコンテナ単体だから無いと思うの
TomEEならあるんじゃね?
JavaEEのフレームワークになら大体乗ってる

31:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 20:08:44.585 ID:7ASYLEH90.net

JBosscacheの場合だとどんな感じで使うんだろ?

オブジェクトを生成したら


キャッシュに登録する
次使うときはキャッシュを参照して
なければもう一度生成する

って感じ?

34:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 20:16:09.193 ID:oaACLH+kK.net

>>31
基本アプリからはキャッシュとDBは別物として扱う
例えばセッションタイムアウトするまでセッション情報を複数のwebサーバーまたはコンテナで共有するとかな
DBに置きに行くときはキャッシュの処理とは別にJDBC呼ぶ
そんな感じ
KVSであれMAPであれ扱い方は変わらん

37:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 20:19:45.173 ID:7ASYLEH90.net

>>34
キャッシュに置く処理とキャッシュを参照する処理は
明示的にコーディングする必要があるの?
それともフレームワークが透過的にやってくれるんだろうか?

DBアクセスの部分は理解してるから問題ない

38:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 20:25:01.496 ID:oaACLH+kK.net

>>37
基本は明示的にやる
DBキャッシュっていう観点では透過的な実装もある

Java キャッシュ hibernate

とかでぐぐれば色々わかるんじゃないかな

39:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 20:28:21.311 ID:7ASYLEH90.net

>>38
なるほど
明示的に管理する必要があるのか

透過的にできるフレームワークがあるかと思ってたけどそこまでは進んでいないのか…


現在の状況についてなんとなく掴めた
ありがとう

19:以下、\(^o^)/でVIPがお送りします 2015/09/21(月) 19:56:37.487 ID:V2KE7mME0.net

最近読んだ本に負荷軽減ならそういう時はサーバ増やしてロードバランサ導入するって書いてあったけど
それじゃだめなん?

(株)アンク
翔泳社
売り上げランキング: 20,942


元スレ:http://viper.2ch.sc/test/read.cgi/news4vip/1442799073/,http://viper.2ch.sc/test/read.cgi/news4vip/1442830541/