【質問】ASP.NETスレ Part5【議論】

このエントリーをはてなブックマークに追加
952nobodyさん:2009/08/27(木) 08:50:09 ID:???
せっかくいい話をしてるんだ。内容で議論してくれるとうれしい。
953nobodyさん:2009/08/27(木) 09:04:10 ID:???
ちょっとMVCの話が出てるから、便乗で質問させて欲しいんだけど、
MVCフレームワークを使わずにASP.NETで開発してるときってさ、
このMVCのVだけ別の会社向けに変更したいとき、みんなどうしてる?

つまり、A社にASP.NETで作ったシステム納品したんだよ。
それと同じでデザインだけ変更したシステムをB社にも納品したいんだよ。

そのためには、Vだけ差し替えなくてはならない。
でも中身は一緒なので、なるべくソースコード、プロジェクトは一本化しておきたい。

ASP.NETの .aspxって、VとCがくっいてて、分離できないのよね。

みんなどうやって解決してるの?

私は、バッチファイルで、A社とB社とで、.aspx (.designer.aspxではないほう) が
差し変わるようにしたけど、こんな原始的な方法しかないのかな?
954nobodyさん:2009/08/27(木) 09:23:14 ID:???
>>953
そんな事態があるわけ無い。
デザインが異なれば機能も異なるし、ガワだけ変えて済む問題じゃない。

普通は三層モデルで、ビジネスレイヤーとデータアクセスレイヤーを
別のクラスライブラリプロジェクトで作っておく。
1つのソリューションの中に以下の感じで。

CompA.Web <- Webプロジェクト
CompA.Business <- クラスライブラリプロジェクト
CompA.DataProvider <- クラスライブラリプロジェクト
CompA.Tests <- テストプロジェクト

もし、本当に>>953の言う通りなら、Webプロジェクト以外は同じ
955nobodyさん:2009/08/27(木) 09:44:26 ID:???
>>954
> デザインが異なれば機能も異なるし、ガワだけ変えて済む問題じゃない。

いや、本当にガワだけなんだ。
ショッピングサイトとか、デザインだけ変えて納品したいんだ。

> もし、本当に>>953の言う通りなら、Webプロジェクト以外は同じ

だからそのWebプロジェクトに、顧客Aと顧客Bへの納品物で
共通部分があるのが嫌なんだ。

だから、
> 私は、バッチファイルで、A社とB社とで、.aspx (.designer.aspxではないほう) が
> 差し変わるようにしたけど、こんな原始的な方法しかないのかな?
こうやっている。これが意外と現実的な解決方法だったりする。
956nobodyさん:2009/08/27(木) 09:58:35 ID:???
CSSと画像ファイル変えるだけなら、それだけ変えればいいんじゃ
957nobodyさん:2009/08/27(木) 10:14:24 ID:???
>>956
CSSと画像ファイルだけではなく、html上の文字列も変えたいんだ。
958nobodyさん:2009/08/27(木) 10:23:53 ID:???
文字列なら、パラメータにしてしまうとか。
grid_viewみたいなのを使わないページなら、
テンプレートエンジン使うとか。
959nobodyさん:2009/08/27(木) 10:38:25 ID:???
>>955
B社にソース納品したとき
「これ他にも流用してるんじゃね?」と勘ぐられたくなければ
面倒でも、「御社専用のコードです」って見える風に手間かけるしかないと思うけど

あと、asp.net は継承って上手くできなかったっけ?
真に共通部分だけでベースクラスつくって、差分は継承後のクラスで書く、とか

Windows フォームなら、バンバン継承して作っちゃってるけど
960nobodyさん:2009/08/27(木) 10:38:33 ID:???
>>958
文字列は、Webデザイナーが変更するんだ。パラメータにすると、そのパラメータが
どこに格納されていて、どこに表示されるかWebデザイナーに説明するのに余計な手間がかかるんだ。

WebデザイナーはDreamWeaverか、Expression Web2で編集を行なう。
この編集が直観的な出来ないような改造はしたくない。

またパラメータだと、それが正しい場所に埋め込まれて、きちんとDIVのボックス内に収まるか、実際にレンダリング
してみないとわからないし、Webデザイナー側で文字列を好きな位置に増やしたり出来ない。

だから、パラメータ化するのは、かなりのデメリットがあって、それなら↓こっちのほうが
はるかにいい解決方法なんだ。

> 私は、バッチファイルで、A社とB社とで、.aspx (.designer.aspxではないほう) が
> 差し変わるようにしたけど、こんな原始的な方法しかないのかな?
961nobodyさん:2009/08/27(木) 10:43:49 ID:???
>>959
> B社にソース納品したとき
> 「これ他にも流用してるんじゃね?」と勘ぐられたくなければ

いや具体的に言うとショッピングサイトで、各会社ごとにデザインだけカスタマイズしての納品なんだ。
だから、流用も何も、デザインだけカスタマイズしての納品ということは納品先のすべての会社に了解してもらい、
納得してもらっているんだ。

> あと、asp.net は継承って上手くできなかったっけ?

あなたが、どういうコードを想定しているのかちょっとわからない。

Windowsフォームの場合でも、別の会社に納品するときに
デザインを変更したいことってあると思うのだが、そういうとき、継承で解決するの?
962nobodyさん:2009/08/27(木) 10:48:38 ID:???
>>960
普通のhtmlページで、たとえばデータベースからのデータで文字が置き換わるだけのようなページだったら、
デザイナにhtmlファイルで作ってもらって、置き換わる部分だけ$name$とかにしとくあれだよ。
963953:2009/08/27(木) 11:49:09 ID:???
>>962
> デザイナにhtmlファイルで作ってもらって、置き換わる部分だけ$name$とかにしとくあれだよ。

$name$ とかに変更したあとのファイルをデザイナーにまたいじってもらおうと思ったときに
デザイナーが最初に作っていたhtmlファイルとは違うので、デザイナーがその構造を理解するのに
余計な時間がかかる。

あと、DreamWeaverでもExpressionWeb2でも直接.aspxを編集して、Web.UIのControlを含めて
正確にレンダリングできるのでWebデザイナーにレポジトリのaspxを直接編集して欲しいんだ。

そんなわけで、結局、↓こっちのほうが優れたやり方だと感じるんだが。

> 私は、バッチファイルで、A社とB社とで、.aspx (.designer.aspxではないほう) が
> 差し変わるようにしたけど、こんな原始的な方法しかないのかな?
964nobodyさん:2009/08/27(木) 12:25:30 ID:???
うん、だから好きなやり方でやれば良いじゃん。誰かに怒られるわけでもないし。

あと、htmlファイルはいじらないでそのまま使うんだよ?
965953:2009/08/27(木) 12:53:42 ID:???
>>964
ん? いじらないの?
ひょっとして、smartyみたいな独自タグ用意して、htmlを書いてそれをaspx側用に置換して使うって話?

あなたの言っていることとは違うのかも知れないが、
htmlを書いてaspxに変換するのは面白いかも知れん。

html → aspx と designer.aspx を自動生成できるように簡単なコンパイラみたいなのを作っておいて、
こいつに対して、View("Label1").Text = "12345"; のように viewとしてアクセスできるような仕組みが
あれば、(MVCフレームワークのように) viewだけ差し替えるなんてことも出来るかも知れん。

postback処理とかある程度自前で書かないといけないのが、アレなんだが…。
こういうフレームワークは勉強のために作ってみたいと思っていたので、いいかも知れん。
966 [―{}@{}@{}-] nobodyさん:2009/08/27(木) 12:56:48 ID:???
>>965
そういうのを世の中ではテンプレートエンジンと言うのだが・・・
967nobodyさん:2009/08/27(木) 13:32:10 ID:???
968nobodyさん:2009/08/27(木) 18:08:02 ID:???
普通にDWでaspxのデザインできるから、それで作ってもらえばいいんでないの?
サーバコントロールの名前だけ変えないでねって感じで
ぺろぺろっとhtmlだけ置き換えたいならASP.NET MVCのほうがいいかもな
969nobodyさん:2009/08/28(金) 15:26:00 ID:???
さーせん。

Visual Web Developer 2008 Express Editionで、.NETじゃない旧来のASPて開発可能?
ttp://www.microsoft.com/japan/msdn/vstudio/express/

すれ違いだったらスマソ。。
970nobodyさん:2009/08/28(金) 16:26:52 ID:???
>>969
Expressでやったことは無い(当方Pro)が、一応できるよ
インテリセンスもそれなりに利くし、IDEでデザインも弄れる
971nobodyさん:2009/09/01(火) 12:03:04 ID:FS0m+muw
ASP.NET + VB で開発することになりました。
しかしWebで情報をあさると、C#のサンプルばかりで、VBのよさげなページがみつかりません。
あるいは、2002ごろの古いページとか。
MS初心者にむけた、ASP.NET+VBのよいページがあればおしえてください。
なお当方JavaとPHPでのWebプログラミング経験は結構あります。
972 [―{}@{}@{}-] nobodyさん:2009/09/01(火) 12:20:37 ID:???
>>971
SharpDevelopのC#→VB.NET変換機能使うとかどうよ?
オンラインでも変換ツールは色々あるよ
973nobodyさん:2009/09/01(火) 12:42:18 ID:???
>>971
そんなに変わらんから、C#憶えるのオススメ。
インテリセンスもC#の方が俺は使いやすかった。
974nobodyさん:2009/09/01(火) 12:45:26 ID:???
PHPからの転向組です。
ASP.NET + VB で、ページの途中で処理を終えるにはどうしたらいいでしょうか。
PHPでいうと
<?php
if (条件) {
 echo "<p>ERROR</p>";
 exit();
}
?>
というコードに相当することをしたいです。
今は
<%
If 条件 Then
 Response.Write("<p>ERROR</p>")
Else
 :
 :
End If
%>
とやっていて、これでも動作はするんですけど、できればPHPのexit()相当のことができると
もっときれいにかけるのにと思って質問しました。
975 [―{}@{}@{}-] nobodyさん:2009/09/01(火) 12:58:59 ID:???
>>974
Response.End()かな
976974:2009/09/01(火) 16:06:48 ID:???
>>975
いえ、Response.End()はたんなるメソッド呼び出しであり、そのあとのコードも実行されますが、
PHPのexit()は構文要素であり、exit()以降のコードは実行されません。
#ちょうど、return文に似たような感じです。

やりたいことは
<%
If エラーがある Then
 エラー処理
Else
 ・・・
 If エラーがある Then
  エラー処理
 Else
  ・・・
 End If
End If
%>
を?x2028;<%
If エラーがある Then
 エラー処理
 exit
End If
・・・
If エラーがある Then
 エラー処理
 exit
End If
・・・
%>
のように書きたいということなんですけど、難しいでしょうか。
977nobodyさん:2009/09/01(火) 17:15:00 ID:???
goto使うとか、
一回しか実行しないDoループでエラー処理後 exit doするとかw
978nobodyさん:2009/09/01(火) 17:48:22 ID:???
>>976
Response.End以降の処理は実行されないぞ
ホントにそこで停止する。それ以降のhtmlすら出力しやしねえw
もし実行されてるなら、例外拾ってなんかしてないか?

ただ俺はPHPしらないが、PHPのexit()ってそのソース見てる範囲では
単にスクリプトブロックを抜けるだけの命令じゃないのか?
ホントにそこで処理を止めたら、bodyタグとかhtmタグlとか閉じてないhtmlソースになるだろ

PHPからの転校って、PHPのソース移植するのでなければ
もうちょっとASP.NET流に作った方がいいんじゃね

表示したいとこにラベルなりテキストボックスなり配置して、
コードビハインド側で関数作って値セットするとかすれば?
979nobodyさん:2009/09/01(火) 19:51:23 ID:???
一般的に考えるのなら、ASP.NETで例に記述してるような
<%%>内にプログラムを記述するようなhtmlへの実行時バインドするのはやめたほうがいいな
Errorの表示をしたいのなら、Labelコントロールを配置してコードビハインドで、
そのLabelにエラーであることを示す文章を表示すべき

もちろん、そうすることで別のメリットがあるのなら話は別だけど。
980979:2009/09/01(火) 19:52:33 ID:???
すまん>>978をよく見ず同じことかいてたわ orz
お詫びに次スレ立てるかな
981nobodyさん:2009/09/01(火) 20:07:16 ID:???
次スレ

【質問】ASP.NETスレ Part6【雑談】
http://pc11.2ch.net/test/read.cgi/php/1251803164/l50
982974:2009/09/02(水) 21:43:56 ID:???
>>977
一回しか実行しないDoループを使う方法は良さそうですね。
ありがとうございます。

>>978
>Response.End以降の処理は実行されないぞ
実行されませんか?Response.End()は単に、「これ以上レスポンスを追加しない」というだけのことで、
PHPのexit()のように「それ移行の処理は実行されない」なんてことはないと思います。

>もうちょっとASP.NET流に作った方がいいんじゃね
今話題にしているのはロジックの書き方であり、これはASP.NET流に作る作らないとはあまり関係ないような。

>>980
>Errorの表示をしたいのなら
エラーを表示したいわけじゃなくて、単にエラー処理をしてるだけです。表示は特にありません。
983nobodyさん:2009/09/02(水) 22:13:09 ID:???
>>982
PHPのやり方に捕らわれすぎ
まず、実行時バインドの中でIF文なんかは使わない。
ロジックの話というのなら、ASP.NETでは、様々なロジックを通常のクラスのメソッド内に記述するので、
単にIF文を終えたいのなら、そのメソッドを終わらせるためにreturnすればいいだけ。

自分はC#しかわからないので、C#風に書かせてもらえれば

protected void Button1_Click(object sender, EventArgs e)
{
 if (エラーがある1)
 {
  エラー処理1
  return;
 }
 if (エラーがある2)
 {
  エラー処理2
  return;
 }
}

IF文を(あなた曰く)簡潔に書くための、ロジックの書き方ならこれでいいはず。
984nobodyさん:2009/09/02(水) 22:13:11 ID:???
DynamicDataって使ってる?
今、普段はNullableなフィールドに親子関係を持たせて親フィールドが特定の条件を満たすとNotNullになるようなコントロールを作りたいんだが、
DynamicValidatorに後付けでNullチェックするValidatorを追加するような事は出来るだろうか?
985nobodyさん:2009/09/02(水) 22:22:23 ID:???
>>983
間違った
×単にIF文を終えたいのなら
○単に処理を終えたいのなら
だな
986nobodyさん:2009/09/03(木) 00:22:25 ID:???
>>983
<html><head></head>
<body>
    <form id="form1" runat="server">
    <%  Trace.Warn("step1")
        Response.End()
        Trace.Warn("step2")  %>
    </form>
</body></html>
これ実行してみろ。step2がトレース出力されないどころか、</body></html>も出力されないから
で、俺はPHPはわからんが、これがPHPのexitなら、</body>や</html>は出力されないのか?

少なくともASP.NETにスクリプトブロックを抜ける命令はないと思う

こういうロジックの組み方はASP.NET流ではないわけだが
まあそれでもあえてこういうロジックのコードでやりたいというなら
スクリプトブロックに関数呼び出しかけばいいんじゃね
<% call hoge() %>
でコードビハインドで
sub hoge()
 if エラーがある then
  エラー処理
  exit sub
 end if
end sub
みたいな感じ...

しかし、通常のWEBフォームでResponse.Writeなんて使うのは
ASP.NETの設計としては間違ってると思うがな
987nobodyさん:2009/09/03(木) 01:02:58 ID:???
>>986
たぶん、純粋にその時点で処理を終了するという、VBでない
クラシックなBASICのEND的なものを欲してるんじゃね?
Formでいうところの、Form.Close()的な。

それはともかく、IF文を入れ子にしたくなくて、途中で処理を中断したいようなロジックなら
select caseを使えばいいんでないかと思うんだが。

select case true
 case a >= 50 and a < 100
  msgbox "分岐1"
 case a >= 100 and a < 150
  msgbox "分岐2"
 case else
  msgbox "分岐その他"
end select
988nobodyさん:2009/09/03(木) 01:25:10 ID:???
124 名前:就職戦線異状名無しさん[sage] 投稿日:2009/08/18(火) 00:10:04
>>122
ASPなんて今やダレも使ってないがw
どんだけ現場を知らない情弱なんだよw
125 名前:就職戦線異状名無しさん[sage] 投稿日:2009/08/18(火) 21:19:04
ASPってww
いまはjavaかphpだろ
java、phpの技術者需要は今後もなくならない
基幹寄りオープンシステムjavaがなくなることは21世紀中にはないよ
130 名前:就職戦線異状名無しさん[sage] 投稿日:2009/08/20(木) 06:02:52
>>124
うっそだー
俺使ってるもーん
>>125
だからphpにaspとSQLserverだよ
PHP単体でモノが作れると思ってるの?馬鹿なの?
141 名前:就職戦線異状名無しさん[sage] 投稿日:2009/08/22(土) 20:20:01
ASPはVS使うとぐいで簡単に作れるから使われてるよ
いちいち0からソースコード手打ちする会社なんてベンチャーかユー子ぐらい

【志望業界】理系で仕方なくSEに…【行けず】
http://namidame.2ch.net/test/read.cgi/recruit/1242462237/119-
989nobodyさん:2009/09/03(木) 01:56:02 ID:???
>>987
いやだから、処理を終了したいならResponse.Endでいいだろ
実際は、処理を終了したいんじゃなくて、その処理ブロックを抜けたいだけだろう
で、ASP.NETにはスクリプトブロックを抜ける命令はないから、
関数呼び出しにして関数抜けろとか、空ループ回してループ抜けろとか言ってるんじゃないか
990nobodyさん:2009/09/03(木) 02:19:24 ID:???
>>989
あーそうだね
だも処理を抜ける処理としての質問ならphpのexitを例にするのは
ちと意味がちがわなくね?って感じがするね

単にif文を入れ子にしたくないなら>>988のselect caseでいいと思うんだけど。
991nobodyさん:2009/09/03(木) 10:30:27 ID:???
いや、切実な問題ならともかくさ、
割とどうでもいいことで、こういうときうまく書くやり方無いのかなってことでしょ?
形は違うけどいろんな言語やってるとそう思うことは多いよ。
設計が間違ってるとか、メソッドにとかはそりゃそーかもしれんけど、聞いてる人は分かってるだろうし、聞きたいこととは違うかと。
992nobodyさん:2009/09/03(木) 14:10:39 ID:???
だから簡潔に記述するならselect caseでいいじゃん
それにプロシージャ内に書くことがほとんどだからreturnと同義じゃん
993nobodyさん:2009/09/03(木) 14:19:10 ID:1JuFFg5d
うーん。
エラーチェック1
 処理1
 終了
エラーチェック2
 処理2
 終了
エラーチェック3
 処理2
 終了

てやらない? ここでいう終了ってのが無いと、以下全部elseで囲ってネスト深くなっていやっていう話でしょ?
同じ変数の範囲とかのチェックなら selectでもいいかも知れんけどさ。
VBはbreak無しでOKなんだっけ?
994 [―{}@{}@{}-] nobodyさん:2009/09/03(木) 14:24:06 ID:???
なんでそんなにインラインに書くことに拘るんだろ
コードビアインドすれば楽になれるのに
995nobodyさん:2009/09/03(木) 14:25:19 ID:???
いや、だからそうじゃなくて。
コードビハインドの中でもこういう書き方することあるだろ?
996nobodyさん:2009/09/03(木) 14:44:59 ID:???
コードビハインドの中ならメソッド内だからend sub
997nobodyさん:2009/09/03(木) 14:48:45 ID:???
>>996
それだと、このエラー処理の後の共通処理したいところがすっ飛んじまうって言ってるじゃない。
言ってないかw
まあ、どーでもいい話だな。
998 [―{}@{}@{}-] nobodyさん:2009/09/03(木) 14:53:41 ID:???
>>997
そりゃコードの書き方次第だわ
999nobodyさん:2009/09/03(木) 14:54:14 ID:???
>>993
やるけど、そんなのエラーチェックだけ、別メソッドにするしょ?
だから、一つでもエラーが発生して即終了なら、return falseで終了し返り値にfalseを返すし、
すべてのエラーチェックを通る必要があるなら、bool returnValue = trueを宣言して、
エラーチェック内の処理でreturnValue = returnValue & false;を計算し、
メソッドに返り値でreturnValueを返せばいい。

1000nobodyさん:2009/09/03(木) 15:03:49 ID:???
次スレ

【質問】ASP.NETスレ Part6【雑談】
http://pc11.2ch.net/test/read.cgi/php/1251803164/l50
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。