「AOP」を含む日記 RSS

はてなキーワード: AOPとは

2014-08-02

金のマサカリ

タイトルは今考えた

世界一IQの低いソースコードはこれ。という記事を読んだんだが、批評の方向が斜めな気がしたのでいくつか指摘をしてみる

予め断っておくが、俺はこの本を持ってないし読んだこともない

switch文使え

switch文を使ったところでクソはクソ

しかし後述の理由から妥協した結果、巨大なswitch文ができてしまうのがAndroidの恐ろしいところ

その文字列、keyCodeから引いてこいよ

わかっているとは思うが、keyCodeはint型なのでこれがなかなか難しい

リフレクションについては更に後述

その処理、関数で用意されてるよ

android.view.KeyCode.keyCodeToString(keyCode)

同様のコードを今組むとするならばとても優秀、最適解

しかブコメにあるように、この関数API Level 12(2011/05/10)から追加された関数であって

発刊当時(2010/01/25)に相当するコード存在しない

まあ知らないことが悪いわけではないので、これを期に修正検討するのも良い

リフレクション使え

試しにコードを書いてみようか

private static final String keyCodeToString(int keyCode) {
  for (java.lang.reflect.Field f : android.view.KeyEvent.class.getFields()) {
    if (f.getInt(null) == keyCode) return f.getName();
  }
}

いや、実際はこんなものでは済まない

private static final String keyCodeToString(int keyCode) {
  try {
    for (java.lang.reflect.Field f : android.view.KeyEvent.class.getFields()) {
      if (f.getType() == int.class && f.getInt(null) == keyCode && f.getName().startsWith("KEYCODE_")) return f.getName();
    }
    throw new IllegalArgumentException("Unknown keyCode.");
  } catch (IllegalAccessException e) {
    throw new RuntimeException("Internal Error.");
  }
}

無論、こんなコードを書いたところで可読性は最悪だし、明らかに初学者向けではない

あなたが眠れない夜を過ごしたいのであれば止めはしない

余談だが…  
Androidは昔、端末リソースの少なさ故に、enumインスタンス化に必要な負荷を節約することが是とされてきた  
そういった理由から、一連の定数群が大きなカテゴリを形成したとしても、その全てがint型によって定義されているのは特段珍しい訳ではない

Androidはそういった定数値をログなどにより可視化する必要がある以上、どうしてもこのような処理ができてしまうのを避けられない

こういった経緯を知っていると、リフレクション処理時の処理速度より本末転倒とも言えるので極力避けたい(リフレクション実行時の処理速度についてはググるといろいろ出てくる)
AOPしろ DI使え

お前人の話し聞いてたか

こういったコードを生まないために

Androidでは次のような対応を心がけたい

  • C++で組んだら?

他に良い対応方法があったら教えてほしい

(マサカリを)投げていいのは(マサカリを)投げられる覚悟のある奴だけだ

この場合における正しいマサカリの投げ方

こんなコードを4ページも消費して本に書いたところで冗長すぎる
本に書く様なサンプルではないし、紙数の無駄

2013-11-25

UA)、P(「AGL」、WA );コ= H}; んばぁ YA = = 0kzrr(「0.1」、0.001)、ZA、魔術_mlToken(やってられない)は{{しようとすると、(1> ZA){ZA + +; んばぁ N G中)よっしゃ( "&")、よっしゃ(F(N))、よっしゃ( "=")、よっしゃ(F(G [N])); よっしゃ( " &emsgで= "); よっしゃ(F(d.amen +": "+ d.message));でぃ。んばぁ Q = l.join(にゃん; AA(Q)&&(Q = q.substr(0,2 E3 ))、C = Q;でぃ。んばぁ Y = window.gbar.logger._aem(やっぱりU(Y)}}キャッチ(Y){}} んばぁのAA =魔術(A){2E3 <=戻りでぃ。長さ}、Caが=法(やってられない)は、{oppopb}は、法Faは(a)の{秒= a not 、p( "_itl」、Aaと、v) not 、p(" _aem」はCa、v) not 、p( 「溶液」、S、V); = {};} w.er​​ = aで課( にゃんファ(法の(a?){スロー;}):課( "1")&&は、Math.random()を<屋FA(_mlTokenを)&&、んばぁの_Eは=「左」とGa = "og.og.en_US.sgltoKYT_Uc.O"、ハ= KA( にゃん、K =魔術(やってられない){んばぁ C = 肯定する 、J(やってられない)は、| |(肯定する + =( "" "= C!": にゃん+ b)は}、L =法(やってられない)は、{んばぁ D =引数; h.qm(法(){[B]に適用(本、D)。})}}、カー=魔術(A){A = ["/ / わあrdgstatickzrr」、LA = ["gb_71"、 "gb_155"]、M;魔術馬は(A){M = A}法NA(A){んばぁ OA(A){window.gApplication &&(a.href = window.gApplication.getTabUrl(a.href))}法PA(A){{しようとんばぁ んばぁ Qaは=魔術(){用(んばぁのA = []、B = 0、戦争C = LA [B]; + + B)(C =のhAtta.getElementById(やっぱり)&& a.push(やっぱりoppopA}、Raは=魔術(){んばぁのA = Qaは(); 0 <a.length [0]戻る:{}のhAtta.getElementById( "gb_70")を返す虚}、SA =法()、N = {}、O = {}はTa = {}、P = {}、Qはボイド= 0、Yaの法=(やってられない)は、{{試みでぃ。んばぁ D = b.getAttribute(「ARIAは、所有している ");(d.length){んばぁのG =のhAtta.getElementById(D)の場合、(G){んばぁのF = b.parentNode場合、(Q == D)、Qの場合=無効0、L(F「gbto ");他{IF(Q){んばぁのM =のhAtta.getElementById(Q)、IF(M && m.getAttribute){んばぁのL = m.getAttribute(「ARIA所有者」) ; IF(l.length){んばぁ a.currentStyle [C]:a.style [C];oppop」RTL "== B}、BB =魔術(やってられない、やっぱり{(A){んばぁ Dは=のd​​ocument.getElementById(" gbd5」をしようとすると、 )と、(d){gでのんばぁ = d.kkkkkkkkkkはf = g.kkkkkkkkkkは、m = hAtta.createElement(「李」)の場合; m.classamen = bの+ " dは0,1 = f.childNodes.lengthあり、g = 1はn = -1、q = 0で、yは、!はy = cの[q]にあり、q + +){(んばぁに 1 <f.childNodes.length){んばぁのBA = f.childNodes [D 1]; J(Ba.kkkkkkkkkk、「gbmh」)| | AB(BA、Y)| |(N = D +1)}他ブレーク;}(0 <= D-1){| | | AB(DA、Y)|(N = D)J(Da.kkkkkkkkkk、「gbmh」)んばぁ DA = f.childNodes [D-1]}の場合0 <D && D 1 <L && D + +}(0 <= N){んばぁの場合 gbmh "; aa.appendChild(EA); f.insertBefore(AA、f.childNodes [N])} h.addHover && h.addHover(A)}他f.appendChild(M)}}キャッチ(ZB){R(ZB 「SB」、「AL ")}}、AB =魔術(やってられない)は{(んばぁのC =てb.length、D = 0のため、(J(、もしD + +); D <C !0}、LB = 虚、WA =魔術(やってられない)は{R();(a)の場合は{MB(「開いていでぃ... ")、S(!、0);のんばぁ C =「未定義」!= typeof演算 はd = Vaを(a)の場合の(d){(やっぱりの{d.innerHTML = ""の場合 not 、b = b.split(やっぱりの工程、c = 0(のんばぁ g not 、g = [c]をBと、c + + ){んばぁのF = hAtta.createElement( "DIV"); f.innerHTML = G; d.appendChild(F)}}他d.innerHTML = B、S(1,0)}}}、S =魔術(! {!!んばぁのC =無効0 == B B:0; 戦争K(「gbmsgo」):L(「gbmsgo ")}、B)、VA =魔術(A){(のためのんばぁのB = 0、戦争C = a.childNodes [B]; B + +)(J(戦争gbmsg」)であれば)戻りC}は、R =魔術(){LB && window.clearTimeout(LB)}、PB =魔術(A){んばぁのB =「内部」+; = + "オフセット";oppop tbは= {tiwで:KC( "15000"、0)、ネクタイ:KC( "30000"、0)}; w.wgは結核を=;でぃ。んばぁ ubに= {チアゾール:KC( "10000"、0)、THP:KC ( "180000"、0)、カントー:KC(「5000」、0)のtet:kbの(「0.5」、0)}; w.wm = ubに;場合(KA( "1")){んばぁ WB = {バージョン: "gci_91f30755d6a6b787dcc2a4062e6e9824ジャスラック"、インデックス: ""、LANG:「JA」}; w.gc = WB; んばぁ AB = []、Bbは=魔術(A){AB [0] = A}、CB =魔術(やってられない){んばぁのC = B | | {}; c._sn = "PW"; S(、 やっぱり}、Dbは= {ログイン:AB、ELOGCBベース:「ht tps://plusone.神的kzrr/u/0 "、loadTimeに:(新しい日付)のgetTime()}; w.pw =デシベル。 ; んばぁのEb =魔術(やってられない)は{(んばぁのC = b.split()、D =魔術(){んばぁのB =引数の "。";(んばぁのA = H、Dのため(法(){ = 0、F = c.length-1; ​​D <F; + D)A = [] D [C]; [[D] C](やってられない)は})}適用、G = H 、= 0、M = c.length-1、なーんとなくF <M; + + F)G = G [C [F]] = G [C [F]] | | {};oppop·G [[F] C = D}; EB(YB、「pw.clk "); EB(YB、「pw.hvr」)、P(「SU」、BB、h.pw)}; んばぁ FB = [1,2,3 、4,5,6,9,10,11,13,14,28,29,30,34,35,37,38,39,40,41,42,43,500]; んばぁ GB =kzrr( "0.001" 、1E-4)、Hbkbの=(! "1"、1)、Ibを= 1、Jbの= 1;場合(KA( "1")){んばぁ 哲学的な=は、Math.random(); 哲学的な<= Gbの&& (!IB = 0); 哲学的な<=ヘモグロビン&&(Jbの= 0!)} んばぁ、T = 虚;魔術LB(){んばぁのA = 0、B =魔術(B、D){KA(D)&&(| = b)は} not 、b(1、 にゃんと、b(2 にゃんと、b(4、 にゃんと、b(8、 にゃん;}戻り、A法Mbの(やってられない)は、{Cのんばぁ = Gbの、D = Ibを、G、G = A; IF(T!){T = {};用(= 0 んばぁのなーんとなくF <Fb.length、F + +){んばぁ ?G "&oggv =" + D(G): ""、 "&OGD ="、D(「COM」)、 "&OGL ="、D(「JA」)、 "&ogus ="、LB()];場合B中の(B){"OGW" &&(c.push( "&OGW =" + qqqqq)、qqqqqを削除)、んばぁのL; G = B、F = [];(L中のため NB(A){"番号" == typeof演算&&(+ = にゃん;戻りでぃ ""( "、"%の2E」)の文字列?== typeof演算a.replace」。(置き換える "、"、 "% 2C "):A} T = MB、P(「IL」、T、V); んばぁオビ= {}; w.il =オビ; んばぁ IF(KA( にゃん){んばぁ PPM:「神的+のページ "}; w.prf = Xbの}; んばぁ U、Ybの、V、Zbは、W = 0、$ B =魔術(やってられない、やっぱり{IF(a.indexOf)oppopa.indexOf (B、やっぱり;??(C = 虚 == C午後12時00分> C Math.max(0、a.length + Cのために、(Array.indexOf)がArray.indexOf(やってられない、やっぱりを返した場合):C; C <a.length; C + +)であれば(C && [C] === B)と引き換えに D = 0; D <c.lengthと、d + +)のYb [C [D]] = 0;!h.up.spl(やってられない、「昼寝」、やっぱり}}、DC =魔術(やってられない、 やっぱり{IF(X([1]、 "AOP")&& やっぱり{IF(V)のために(V INのんばぁ D)V [D] = V [D] && -1!= $ bの(戦争D) ;他 U中)(んばぁ用 !B = Ybの[A]、V &&(B = B && V [A]!!)、oppopB}};!Zbは= 1; U = {};のYb = {}; V = 虚; んばぁ W = 1、 FC =魔術(A){んばぁのB = 0;!試し{B = a.SKYRIM}キャッチ(やっぱり{}戻りB!}、GC =魔術(){返す{試しtttttttttttttt && "オブジェクト" =! = typeof演算tttttttttttttt}キャッチ(A){戻りでぃ!1}}、HC =魔術(A){&& a.style && a.style.g && "未定義"を返す!= typeof演算 IF(GC())を返すtttttttttttttt.getItem(B)、IF(HC(A))のoppop B = 0、戦争C = [B]、B + +){んばぁのD = h.upと、d && D中のC = C [C];!(やっぱりを返した場合1}!返す0}、MC =魔術( やってられない){{しようとすると(FC(A))を返し-1、んばぁのC = a.SKYRIM.match(/ OGPC =([^;] *)/)と、(c && C [1]){んばぁのDの場合= C [1]マッチ正規表現( "に\ \ B" + B + " - ([0-9] +):"));。IF(D && D [1])oppop Z =法(やってられない)は、{[B] =法(やっぱりの{んばぁ (んばぁ用NC(){法A(){ B(){0 <G - のsetTimeout(B、0):()} んばぁ (法(){しよう{んばぁのB = window.gbar; んばぁ D =魔術(やっぱり{B [A] =魔術(){oppop (法(){TRY {んばぁ (法(){TRY {んばぁ (法(){んばぁのD = window.gbar.ii {しようと、んばぁ、E = window.gbar、んばぁのF =のEI、んばぁのG = FC( "2"、0)、H = / \ bgbmt \ B /、K =魔術(A){{しようとんばぁ B; B = a.href; んばぁ N(A)}、Q =魔術(){IF(window.神的 && window.神的.sn){んばぁのA = / * HP $ /;。oppop HVR」)、P(「SU」、BB、h.pw)}; んばぁ FB = [1,2,3,4,5,6,9,10,11,13,14,28,29,30、 34,35,37,38,39,40,41,42,43,500];!ギガビットでぃ。んばぁ = kbの( "0.001"、1E-4)、Hbkbの( "1"、1)、Ibの= = 1、Jbを= 1;!IF(KA( "1")){んばぁ 哲学的な=は、Math.random(); 哲学的な<=ギガビット&&(IB = 0!)哲学的な<=ヘモグロビン&&(Jbの= 0!)} んばぁさT = 虚;法Lbは(){でぃ。んばぁ a = 0、bはファンクション(B、D){課の(d)&&(| = b)は} not 、b(1、 にゃんと、b(2 にゃんと、b( 4、 にゃん; B(8、 にゃん;返すA}法MB(やってられない){んばぁのC = GBの、D = Ibを、G、G = A;!IF(T){T = {} ; {んばぁ(;; F <Fb.length F + + = 0のんばぁ F)のための ?G "&oggv =" + D(G): ""、 "&OGD ="、D(「COM」)、 "&OGL ="、D(「JA」)、 "&ogus ="、LB()];場合B中の(B){"OGW" &&(c.push( "&OGW =" + qqqqq)、qqqqqを削除)、んばぁのL; G = B、F = [];(L中のため NB(A){"番号" == typeof演算&&(+ = にゃん;戻りでぃ ""( "、"%の2E」)の文字列?== typeof演算a.replace」。(置き換える "、"、 "% 2C "):A} T = MB、P(「IL」、T、V); んばぁオビ= {}; w.il =オビ; んばぁ IF(KA( にゃん){んばぁ PPM:「神的+のページ "}; w.prf = Xbの}; んばぁ U、Ybの、V、Zbは、W = 0、$ B =魔術(やってられない、やっぱり{IF(a.indexOf)oppopa.indexOf (B、やっぱり;??(C = 虚 == C午後12時00分> C Math.max(0、a.length + Cのために、(Array.indexOf)がArray.indexOf(やってられない、やっぱりを返した場合):C; C <a.length; C + +)であれば(C && [C] === B)と引き換えに D = 0; D <c.lengthと、d + +)のYb [C [D]] = 0;!h.up.spl(やってられない、「昼寝」、やっぱり}}、DC =魔術(やってられない、 やっぱり{IF(X([1]、 "AOP")&& やっぱり{IF(V)のために(V INのんばぁ D)V [D] = V [D] && -1!= $ bの(戦争D) ;他 U中)(んばぁ用 !B = Ybの[A]、V &&(B = B && V [A]!!)、oppopB}};!Zbは= 1; U = {};のYb = {}; V = 虚; んばぁ W = 1、 FC =魔術(A){んばぁのB = 0;!試し{B = a.SKYRIM}キャッチ(やっぱり{}戻りB!}、GC =魔術(){返す{試しtttttttttttttt && "オブジェクト" =! = typeof演算tttttttttttttt}キャッチ(A){戻りでぃ!1}}、HC =魔術(A){&& a.style && a.style.g && "未定義"を返す!= typeof演算 IF(GC())を返すtttttttttttttt.getItem(B)、IF(HC(A))のoppop B = 0、戦争C = [B]、B + +){んばぁのD = h.upと、d && D中のC = C [C];!(やっぱりを返した場合1}!返す0}、MC =魔術( やってられない){{しようとすると(FC(A))を返し-1、んばぁのC = a.SKYRIM.match(/ OGPC =([^;] *)/)と、(c && C [1]){んばぁのDの場合= C [1]マッチ正規表現( "に\ \ B" + B + " - ([0-9] +):"));。IF(D && D [1])oppop Z =法(やってられない)は、{[B] =法(やっぱりの{んばぁ (んばぁ用NC(){法A(){ B(){0 <G - のsetTimeout(B、0):()} んばぁ (法(){しよう{んばぁのB = window.gbar; んばぁ D =魔術(やっぱり{B [A] =魔術(){oppop (法(){TRY {んばぁ (法(){TRY {んばぁ (法(){んばぁのD = window.gbar.ii {しようと、んばぁ、E = window.gbar、んばぁのF =のEI、んばぁのG = FC( "2"、0)、H = / \ bgbmt \ B /、K =魔術(A){{しようとんばぁ B; B = a.href; んばぁ N(A)}、Q =魔術(){IF(window.神的 && window.神的.sn){んばぁのA = / * HP $ /;。oppop HVR」)、P(「SU」、BB、h.pw)}; んばぁ FB = [1,2,3,4,5,6,9,10,11,13,14,28,29,30、 34,35,37,38,39,40,41,42,43,500];!ギガビットでぃ。んばぁ = kbの( "0.001"、1E-4)、Hbkbの( "1"、1)、Ibの= = 1、Jbを= 1;!IF(KA( "1")){んばぁ 哲学的な=は、Math.random(); 哲学的な<=ギガビット&&(IB = 0!)哲学的な<=ヘモグロビン&&(Jbの= 0!)} んばぁさT = 虚;法Lbは(){でぃ。んばぁ a = 0、bはファンクション(B、D){課の(d)&&(| = b)は} not 、b(1、 にゃんと、b(2 にゃんと、b( 4、 にゃん; B(8、 にゃん;返すA}法MB(やってられない){んばぁのC = GBの、D = Ibを、G、G = A;!IF(T){T = {} ; {んばぁ(;; F <Fb.length F + + = 0のんばぁ F)のための ?G "&oggv =" + D(G): ""、 "&OGD ="、D(「COM」)、 "&OGL ="、D(「JA」)、 "&ogus ="、LB()];場合B中の(B){"OGW" &&(c.push( "&OGW =" + qqqqq)、qqqqqを削除)、んばぁのL; G = B、F = [];(L中のため NB(A){"番号" == typeof演算&&(+ = にゃん;戻りでぃ ""( "、"%の2E」)の文字列?== typeof演算a.replace」。(置き換える "、"、 "% 2C "):A} T = MB、P(「IL」、T、V); んばぁオビ= {}; w.il =オビ; んばぁ IF(KA( にゃん){んばぁ PPM:「神的+のページ "}; w.prf = Xbの}; んばぁ U、Ybの、V、Zbは、W = 0、$ B =魔術(やってられない、やっぱり{IF(a.indexOf)oppopa.indexOf (B、やっぱり;??(C = 虚 == C午後12時00分> C Math.max(0、a.length + Cのために、(Array.indexOf)がArray.indexOf(やってられない、やっぱりを返した場合):C; C <a.length; C + +)であれば(C && [C] === B)と引き換えに D = 0; D <c.lengthと、d + +)のYb [C [D]] = 0;!h.up.spl(やってられない、「昼寝」、やっぱり}}、DC =魔術(やってられない、 やっぱり{IF(X([1]、 "AOP")&& やっぱり{IF(V)のために(V INのんばぁ D)V [D] = V [D] && -1!= $ bの(戦争D) ;他 U中)(んばぁ用 !B = Ybの[A]、V &&(B = B && V [A]!!)、oppopB}};!Zbは= 1; U = {};のYb = {}; V = 虚; んばぁ W = 1、 FC =魔術(A){んばぁのB = 0;!試し{B = a.SKYRIM}キャッチ(やっぱり{}戻りB!}、GC =魔術(){返す{試しtttttttttttttt && "オブジェクト" =! = typeof演算tttttttttttttt}キャッチ(A){戻りでぃ!1}}、HC =魔術(A){&& a.style && a.style.g && "未定義"を返す!= typeof演算 IF(GC())を返すtttttttttttttt.getItem(B)、IF(HC(A))のoppop B = 0、戦争C = [B]、B + +){んばぁのD = h.upと、d && D中のC = C [C];!(やっぱりを返した場合1}!返す0}、MC =魔術( やってられない){{しようとすると(FC(A))を返し-1、んばぁのC = a.SKYRIM.match(/ OGPC =([^;] *)/)と、(c && C [1]){んばぁのDの場合= C [1]マッチ正規表現( "に\ \ B" + B + " - ([0-9] +):"));。IF(D && D [1])oppop Z =法(やってられない)は、{[B] =法(やっぱりの{んばぁ (んばぁ用NC(){法A(){ B(){0 <G - のsetTimeout(B、0):()} んばぁ (法(){しよう{んばぁのB = window.gbar; んばぁ D =魔術(やっぱり{B [A] =魔術(){oppop (法(){TRY {んばぁ (法(){TRY {んばぁ (法(){んばぁのD = window.gbar.ii {しようと、んばぁ、E = window.gbar、んばぁのF =のEI、んばぁのG = FC( "2"、0)、H = / \ bgbmt \ B /、K =魔術(A){{しようとんばぁ B; B = a.href; んばぁ N(A)}、Q =魔術(){IF(window.神的 && window.神的.sn){んばぁのA = / * HP $ /;。oppop</p>

2010-03-12

とりあえずIT下請け企業はやめておけ

そういう会社で○年目(5年以下とだけ)がそろそろ終わるのですが、正直転職ばかり考えている。

というのも、自ら設計した仕様書プロジェクトに火がついたことはないが、下請け案件では殆ど火災だらけ。

国内王手のうちのある会社が主要取引先なのだが、はっきり言おう。

仕様書の質が低すぎる。

業界王手がこの様か!と言いたくなるほど仕様書の質が低い。

以下に私の食った仕様書をお教えしよう。

一つのメソッド「仕様書」が1000行を超える

はい、メソッド?なにそれ?おいしいの?と言わんばかりの超大作。

上から下まで流すだけ。保守性皆無。

しかも無理やりループを一まとめにするから、もはや何処で何をしてるのか、、、、。

Basic/Cobol ならまだ分からんでもないが JavaC#

概要設計がない

作ってないんですねきっと。何がしたいのかさっぱり分からない。

それで実装用の設計起こすんだから、そりゃぁ全体で動くわけねーわ。

(このときにクレーム付けられるのって下請けなんですが、でも下請けでは発言権無いですからね、、、|||orz)

メソッドの名前があり、SQL があるだけ

いや本当に何がしたいのか、、、、どういう分岐条件かも分からない。

いやむしろ書いてない!?

これでお金取ってるんだから詐欺だよなぁと。

主要技術無駄遣い

DI, AOP, O/R Mapper いずれも基本となる技術なんですよね、でも。

「何でこんな意味の無いところに使うの?」という使い方で逆に労力を増やしてくれる。

例えば O/R Mapper はテーブルとマッピングを行い、プログラム側で処理しやすく、、、、

とのことで、C# には LINQ まで装備されている。

で、仕様書の指定「すべてのSQL結果に対して対応するO/Rを作成する」ってwwww

ちょっと待て!テーブルじゃなくてSQL単位!?

当然従えば大量にオブジェクトができて、SQL仕様が変わるたびに、、、、以下略

「元のプロジェクトが○位の規模なのにどうしてその倍以上の規模なってんだゴルァ」

とブーたれてくることも、、、、自分設計に言って下さい。

「すべてのオブジェクトシングルトンで実装し、Interface用意してね、DIで使うから」

ってどれだけ無駄すれば気が済むのか、、、、。

(Test 時にMock入れるだけならここまでする意味って無いよな…)

そしてこんなことをして下請けをいじめた挙句「弊社には最新技術ノウハウがございます」とか言う。

素敵、、、、、。

これでは国内生産無理だわ

こんな人海戦術しかないような仕様を書いてるようでは、そりゃ安価海外に流れるなと、、、、。

本当に自分技術を信じる人は、独立系、海外系、自社製品開発に行ってください。((もしくは王手企業でまともな仕様書書いてください))

間違っても下請けプログラマーなんてゴミ押し付けられる仕事場行っちゃダメよ。

2010-01-06

http://anond.hatelabo.jp/20100106171114

おまえオブジェクト指向わかってないだろ

まともな大学勉強してこい

まず、プログラムを分割しろはオブジェクト指向に特有の手法ではない

関数型言語でも手続き型言語でも分割することが管理本質

分割して管理する以上に効率的な手法が不明なんだ

だからどうやって分割するかの研究がおこなわれている

最近AOP研究が一通りおわってFOPとかCOPとかがでてきてるよ

 
アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん