オブジェクト指向で設計する方法について語ってくれ
要件からクラスに分ける辺りの最初のほうについて特に意見を聞きたい
おれも聞きたい
デザインパティーン
>>3
デザインパターンで設計の中盤~後半だよね?
誰が設計してもある程度同じクラス設計になるべきだと思う
ER設計は正しい手順でやればある程度同じ設計になる
オブジェクトのクラス設計でも標準的な手法みたいなのはないんだろうか?
自転車とおなじで慣れればどうってことないんだけど
オブジェクト指向の設計って難しいの?
プラモ作るときとかさ、組み立てるのに必要なパーツがあるじゃん?それ一個ずつ定義するだけじゃん
んで何回もプラスチックで出来ているとか定義するの面倒だからさ、Aグループはプラスチックで出来ているって定義してそれ使い回すだけじゃん
俺のオブジェクト指向の考え方が間違ってるのかな?
>>6
そのパーツってどんな基準で決めるべきなのってこと
それが設計指針というか方針と言うか
そういうのがないと人によってばらばらになるし、いい部品にならない
>>8
どんな状況での開発を想定してるの?
>>9
例えば2ちゃんをオブジェクト指向で設計したとすると
どういう手順でクラスに分けて行くべきだろう?
まず要件定義(ユースケースかな?)すると
スレを立てる
スレを一覧表示する
スレを読み込む
スレに書き込む
みたいになるよな
その次のステップをどうすべきだろう?
じゃあ俺らでオブジェクト指向で第二の2chを作ろうか
>>17
いいね
このスレで具体的な設計まで落とせたらやろうか
クラスの役割を分担して拡張、修正を簡単にするもの
>>10
そうだよな
概論としては理解できるんだけど実際のシステムに適用するときの基準が
あんまりはっきりしない
なに単位でクラスにするかだよな
>>11
そうだよな
概論としては理解できるんだけど実際のシステムに適用するときの基準が
あんまりはっきりしない
1操作対象1クラスとすればおk
例えば2chであれば、板・スレッド・レスは明らかに独立したクラスである
メ欄の内容で特殊効果を発生させる機能は、メ欄というレスクラスの一部のようには見えるが、
影響範囲が明らかにレスの範囲に止まらないので別クラスとすべき
恐らく、抽象特殊効果クラス、それを継承した個々の特殊効果クラスを作り、
メ欄をパースして個々の特殊効果クラスを生成するファクトリークラスを用意するのが「それっぽい」であろう
名前欄も同様
IPからIDを生成する機能は、「板ごとのID生成クラス」「IP、BE、メ欄等をID生成クラスに渡すクラス」に分離
名前欄も同様
モデル系は大体こんなところか
これにビューとかコントローラーがくっつく
>>35
レスを独立したクラスにすると膨大な数のオブジェクトが生成されることになる
それでもレスを独立したクラスにすべきなのか?とかそのあたりはどう考えるのがいいだろ
>>48
なんで膨大な数のオブジェクトが生成されるんだ?
高々1000オブジェクト程度だろう
>>50
何個スレがあると思ってるんだ?
>>54
一度に表示するのは最大で1000レスだろう
残りはDBに入ったままでオブジェクトにはならない
>>55
VIPでも500スレくらいはアクティブだろ…
過去ログとかもあるし
>>58
どこのURLにアクセスすると500スレッドを全部1ページに表示できるの?????
>>59
一度にアクセスするのは1ユーザじゃないんだが…
それにスレが参照するたびに数100オブジェクト生成するのか?
サーバでキャッシュしないの?
お前が言ってるのは詳細設計フェイズの話なんだよ
考え方がプログラマーよりすぎ
もっとSEとして考えてみろ
ユースケース作る前にDFD図作ろうぜ
機能の共通化もし易いしお前らが大好きな抽象クラスも上流工程で妄想し易い
>>44
そうなんだよなあ
オブジェクト指向設計でやる場合でもDFDとかERとかあると理解しやすい気がしてる
ERから作るべきクラスが見えてくるし
実装方法はどうでもいい
オブジェクトの量は別にどうでもいいと思うんだが
どちらかというと種類が問題な気がする
レベルの低い奴の書き込みは無視する
例えば2ちゃんをオブジェクト指向で設計したとすると
どういう手順でクラスに分けて行くべきだろう?
まず要件定義(ユースケースかな?)すると
スレを立てる
スレを一覧表示する
スレを読み込む
スレに書き込む
みたいになるよな
その次のステップをどうすべきだろう?
おれオブジェクト指向わからんけど要件定義の段階でパフォーマンスから考えるとかいってるやつが素人なのはわかる
>>110
設計には段階があるって言ったが
それと要件定義と設計の区別ができていないだろお前
>>110
要件段階で非機能要件詰めないでどうやって機能設計するんだ?
クソスレが数万本あって同時接続数が100万超えるかもってなったらソフトウェアの作りが変わるだろ?
変わるとオブジェクトの作りやクラスの分割や機能配分も見直さないといけないだろ
戯けたことばっかり言ってるからお前は就活に失敗するクソ学生か下っ端クソPGにしかなれんのだよ
うるせー
フレームワーク構築時に居たマが余りにもレベル低くて
メソッドが全てパブリックで、それを修正することなく使ってた俺の前職場をディスるのはやめろ!
俺がクラスを作ると一度しかインスタンス化されないクラスばかりで全然活かせてる気がしない
オブジェクト指向って中々の規模じゃなきゃ使わないじゃん
これ言っちゃいかんのかもしれんけど、たかだか2chでオブジェクト指向使ったほうがコストとかサーバーへの負担デカいよね……
そもそも1レス1オブジェクトの必要なくてさ、ただ単にデータベースなりcsvなり何なりから呼び出すだけで終わっちゃうよね
サーバとクライアントの話が混ざっている気がするが
Webアプリケーションで複数のユーザから参照されるオブジェクトがある場合に
それらを管理するための仕組みはどうするものなの
フレームワークってありそうだけど
例えばオンライン販売サイトで商品オブジェクトはすべてのユーザで共有するとか
サーブレットやらアパッチやらは不揮発なデータ持てないし
ファイルに自分で書くならDBでいいし
>>6
毎回DBアクセスするのは非効率だから
DBから読み込んだオブジェクトを共有するってイメージ
予想外に高度な使い方なのか?
普通にフレームワークがあるのかと思ってた
キャッシュサーバーとかmemcachedとかあるじゃん
>>9
キャッシュサーバーはページをキャッシュするサーバのこと指してる?
memcachedは初めて聞いた
データベースの前に置かれるイメージなの?
オブジェクトもキャッシュできるんだろうか?
オブジェクト自体は多重起動してデータはmemcacheから読み出せば?って意味じゃね?
static変数に入れておくという方法も
>>12
全体で500MBを超えたら古いオブジェクトは破棄するみたいな管理もしたい
>>14
もちろんデータサイズのスレッショルドやらでガベージコレクタ走らせるような実装もある
>>18
その実装ってフレームワークみたいな形でオープンソース化されてるものはない?
>>20
俺は仕事でJBosscacheくらいしか触ってないが
探せばわりと色々あるはず
>>24
アプリケーションサーバの機能あるいはアドオンとして提供されるのかな?
Tomcatでもあるか探してみる
>>26
tomcatはサーブレットコンテナ単体だから無いと思うの
TomEEならあるんじゃね?
JavaEEのフレームワークになら大体乗ってる
JBosscacheの場合だとどんな感じで使うんだろ?
オブジェクトを生成したら
キャッシュに登録する
次使うときはキャッシュを参照して
なければもう一度生成する
って感じ?
>>31
基本アプリからはキャッシュとDBは別物として扱う
例えばセッションタイムアウトするまでセッション情報を複数のwebサーバーまたはコンテナで共有するとかな
DBに置きに行くときはキャッシュの処理とは別にJDBC呼ぶ
そんな感じ
KVSであれMAPであれ扱い方は変わらん
>>34
キャッシュに置く処理とキャッシュを参照する処理は
明示的にコーディングする必要があるの?
それともフレームワークが透過的にやってくれるんだろうか?
DBアクセスの部分は理解してるから問題ない
>>37
基本は明示的にやる
DBキャッシュっていう観点では透過的な実装もある
Java キャッシュ hibernate
とかでぐぐれば色々わかるんじゃないかな
>>38
なるほど
明示的に管理する必要があるのか
透過的にできるフレームワークがあるかと思ってたけどそこまでは進んでいないのか…
現在の状況についてなんとなく掴めた
ありがとう
最近読んだ本に負荷軽減ならそういう時はサーバ増やしてロードバランサ導入するって書いてあったけど
それじゃだめなん?
元スレ:http://viper.2ch.sc/test/read.cgi/news4vip/1442799073/,http://viper.2ch.sc/test/read.cgi/news4vip/1442830541/