ふらっと C#,C♯,C#(初心者用) Part151

■ このスレッドは過去ログ倉庫に格納されています
2021/05/16(日) 10:45:59.00ID:8qTwOc620
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part150
https://mevius.5ch.net/test/read.cgi/tech/1616471904/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/07/10(土) 11:59:52.40ID:QMdSDj/s0
>>532
VSのアプデがうまくいかなくて.NET5導入失敗してます
ちょっと調べてみます
>>534
自分でたまに作るショボイアプリでは使ってます
ただ、今みたいに適当にググってなんとなく使ってるとわけ分からなくなってくるので
頭整理して、基本的な雛形作っておこうかなと
2021/07/10(土) 12:32:26.07ID:fmB/UGP20
移行に手間とかかかるか?
大抵は.net4のものは、net5にそのままコンパイル可能だと思うのだが。
Reflectionの深い機能使ってない限り。
2021/07/10(土) 12:45:55.81ID:vXwtga0B0
どのWindowsにも.net frameworkが最初から入ってるっていうのは長所だと思うんだけど
.net core以降ではその長所を棄てるということなのか?
2021/07/10(土) 13:12:27.70ID:6cPOy8xla
俺はフレームワークのプレインストールは要らないと思うな
シングルバイナリとランタイム依存版をセットで提供するだけ
ランタイム依存版は使いたい奴だけ使えばいい
そいつは解ってる奴だからランタイムも自分で勝手にインストールするはずだ
解って無いやつは何も考えずにシングルバイナリでいい
解ってるけど多少の労力を支払ってまでランタイム依存版を使うほどリソースに困ってない人もシングルバイナリでいい
2021/07/10(土) 14:42:20.88ID:PtGlam4/a
>>538
その辺よく知らんのだけど、昔のスタティックリンクとは違うわけ?

つまり、実質的にまったく同一のバイナリが複数メモリーを
占有するようなことは起こらないような仕組みになってるん?
2021/07/10(土) 15:39:29.96ID:qTmdpryya
>>539
仕様上はどうなってるか知らんがメモリには別々にロードされるんじゃないかなと思う

殆どの場合はその程度のリソース消費は気にしなくていい
特にDNFがプレインストールされてないとトラブるような情弱にはリソース使用量の最適化とか縁のない話
こいつらには細けぇことはいいからシングルバイナリ使っとけ!でおk
なのでフレームワークのプレインストールは要らない

リソース使用量を最適化してマシンを限界まで使い倒すぞ
なんていう連中なら苦もなくランタイムとランタイム依存版バイナリをインストールして使うはずだ
だからやっぱりプレインストールされている必要はない
2021/07/10(土) 15:44:56.62ID:vXwtga0B0
実行環境と抱き合わせて配布とか
そんなことするんならもうPythonでええやんってなる
2021/07/10(土) 16:55:53.36ID:Dzo5EFol0
Windowsにフレームワーク入ってるの助かるわ
ネットに繋げられない環境でもcsc.exeとメモ帳でアプリやゲーム作れるから
2021/07/10(土) 17:52:10.46ID:qTmdpryya
かわいそうに
2021/07/10(土) 17:58:26.09ID:jZAbZ8pYM
猫にUSBを抱かせるお仕事ですか?
2021/07/10(土) 18:11:47.93ID:fmB/UGP20
単一かつ自己完結は実行開始までが遅いからコンソールには向いてない。
フォームだとReadyToRun含めるとウィンドウ表示するだけで100メガあるうえ、起動までi9900KSでも3秒かかるっていう...

よほどnet5の機能つかってるとかでないと、.net frameworkの方が向こう5年は取り回しがしやすい。
2021/07/10(土) 18:18:51.15ID:EnquCIhL0
.net coreにうまく切り替えられるとは思えないな
2021/07/10(土) 18:20:09.73ID:q3x8ofXXa
>>540
なるほど結局スタティックリンク的な資源を富豪的に使う方法なのかな
2021/07/10(土) 19:10:49.52ID:pM3BYo7pM
>>537
それが逆に.NETの進化を停滞させた、とMSは考えているようだ
まあ元々は.NETってWindowsの基幹になるはずだったわけで、その目論見が頓挫した時点でもうWindowsにバンドルする理由はなくなったんだよ
2021/07/10(土) 19:51:59.57ID:SPfFUvAXa
>>547
そう
DNFってことはどうせウィドウズデスクトップだろ
富豪マシン前提でなにも問題はない
2021/07/10(土) 20:03:05.60ID:nri5Fy1s0
バカの発想ってすごいな
2021/07/10(土) 20:28:42.50ID:SPfFUvAXa
つぶやきボット
2021/07/10(土) 21:04:13.27ID:hLDcq/e00
>>536
いやいやw
553デフォルトの名無しさん (ワッチョイ cb8e-Fz9b)
垢版 |
2021/07/11(日) 00:00:18.89ID:AMGtLvlu0
>>532
こういう馬鹿がいたよね、WPFの時
2021/07/11(日) 00:17:00.27ID:+hcDuARUM
WPFの二の舞なら前環境が15年残ることになるな
素晴らしい
2021/07/11(日) 01:49:07.68ID:2ghBsept0
>>554
やっぱり .NetFramework 5.0をリリースするは
2021/07/11(日) 06:16:08.91ID:LzQeZkjlM
Win11製品出荷の頃には.NET6が公開予定だろ
標準かオプション機能あたりで載せてくる気がする
2021/07/11(日) 09:28:36.06ID:LL6sPKEi0
>>548
進化というと聞こえはいいけど、サポートを長く続けたくないってのもあるんだろうなぁ。
今でも長期サポートするアプリケーションなら.NET Frameworkの方を検討するだろうし。
2021/07/11(日) 11:18:27.69ID:QsHvX08n0
VB6がずっとサポートされているから.NET Frameworkも同じようにサポートされ続けるだろ
2021/07/11(日) 12:16:56.63ID:xAgoNPlJa
VB6はサポート切れてるだろ、とっくの昔に
2021/07/11(日) 14:17:44.18ID:Lbkl8ipl0
開発環境はサポート切れてるが、ランタイムの動作はサポートされてるはず
2021/07/11(日) 15:37:15.91ID:xAgoNPlJa
動く=サポートなら、そう
2021/07/11(日) 15:57:28.85ID:VpNTKYMHM
>>561
傍から見てても恥ずかしいから当分ROMってなよ…
https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-basic-6/visual-basic-6-support-policy
2021/07/11(日) 16:00:55.69ID:A5YZ54Ww0
今時VBを押してるのも恥ずかしいんじゃ
2021/07/11(日) 16:17:44.15ID:KzRRh8fp0
>>563
誰もVB6を推してなんかいないだろう
間違った情報が指摘されただけだろうに
2021/07/11(日) 16:26:06.44ID:A5YZ54Ww0
>>564
別に指摘に対して言ったわけでもないが
そういうところ嫌われるよ
2021/07/11(日) 16:46:46.30ID:qTMmoATzM
>>563,565
推してるとかどこから出てきたんだよ
単にVB6が今でもサポートされてるなら.NETFrameworkもサポートされんじゃね?
って話だろ
人が嫌われるかどうか心配する前に自分の理解力を心配しなよw
2021/07/11(日) 16:50:04.47ID:A5YZ54Ww0
>>566
流れに対して言ったんだぞ
理解力がどうとか、そうやって他人を攻撃しようとするところは良くないぞ?
2021/07/11(日) 16:58:33.98ID:LL6sPKEi0
言ってる言葉が全部自分に向かってるという、エッシャーの騙し絵みたいな奴だなw
2021/07/11(日) 17:03:40.26ID:A5YZ54Ww0
えへへ
これでスレ違いのVBの話題は終わったやろw
2021/07/11(日) 17:11:11.75ID:FD6lxZ3g0
severityがcriticalじゃなければセキュリティパッチも出ない状況を
「サポートされてる」の一言で済まされるとモヤるな
2021/07/11(日) 17:16:20.09ID:BeeJLMuH0
モヤってもいいが続きはお家の人とやってくれなw
2021/07/11(日) 17:24:32.12ID:pF41bBSFa
こう言ってはなんだけど、「サポート」されているかどうかは
営業面では重要な意味を持つけど、大半のエンジニアにとっては「それが何か実質的な意味を持つのか?」
っていうのが率直なところじゃないの?
2021/07/11(日) 17:37:23.51ID:y+4j5QejM
VB6推しなんて流れもないし
> そういうところ嫌われるよ
が他人への攻撃じゃないと思ってるのかよ…
そもそも>>563がいなきゃそのまま終わってた話だろw
2021/07/11(日) 17:40:55.24ID:y+4j5QejM
>>570
少なくともセキュリティパッチが出るんならサポートはされてるだろ
サポートレベルの話はまた別問題
2021/07/11(日) 21:48:39.79ID:cxQyUkFy0
.net frameworkはwindows updateに入ってるから勝手にセキュリティの穴や不備も塞がるが、
.netの方はどういう対策予定になってんの?

プログラム無知な個々人さえわざわざあの.net5のランタイムを細かなアップデートに合わせて取りにいく想定なの?
あるいらアプリ作者がこのランタイムの細かなアップデートに合わせてアプリ再配布する想定なの?
2021/07/11(日) 21:55:49.88ID:JpOAcHlL0
Windows Updateのオプションの他のMS製品の更新プログラムを受け取るを有効にしたら
.NET 5や.NET Core 3.1のセキュリティアップデートが適用された
インストーラーで入れたやつだからかな
2021/07/11(日) 21:55:56.30ID:gcLNEatSM
基本的に作者の責任だね
.NETに限らず、ライブラリをスタティックリンクしたりDLLを同梱したり普通にあるでしょ
デスクトップアプリが使ってるライブラリの脆弱性が問題になることなんて実際まず無い
そんなことを気にするよりREADMEにパスワード使いまわしはやめましょうとでも書いて啓蒙活動でもしたほうがよほど効果あるよ
2021/07/11(日) 22:03:25.14ID:8QU6GoBD0
.netってなんですか?
2021/07/11(日) 22:31:33.80ID:LL6sPKEi0
.NET Core 3.1インストールしてたはずなのにいつのまにか5になってた。あれはWindowsUpdateなんかな。
2021/07/11(日) 22:35:19.64ID:NwP/aFzk0
>>579
blog で公式発表って嫌ですよね
https://devblogs.microsoft.com/dotnet/net-core-updates-coming-to-microsoft-update/
2021/07/11(日) 23:56:07.09ID:W/0BfvqFM
そもそも.NET5って来年2月でサポート切れてWindowsUpdateによる更新もされなくなるし、今後出るであろうLTSでもサポート期間は3年しかない
セキュリティアップデートなんて真面目に気にしてたら塩漬け運用は不可能だ
幸いにもアプリにスタティックリンクされたランタイムやライブラリの更新って組織のセキュリティポリシーでは見過ごされがちなんで、
サポートの切れた.NETランタイムのインストールをユーザーに要求するよりはSCDの方が面倒なことになりにくいだろうね
582デフォルトの名無しさん (ワッチョイ cb8e-Fz9b)
垢版 |
2021/07/12(月) 02:10:19.60ID:IjeYV4lO0
さてここで、繰り返そう

>>532の発言内容

>.NET Frameworkはもう先がないので今新規開発するなら.NET 5一択
>.NET Frameworkからの移行は手間がかかる
2021/07/12(月) 02:28:22.02ID:PmY8iF4Ja
正直ここ数年は.NETもC#も片手間以下にしか触ってなかったので
CoreってWindows 8の時代のPCLの延長線上のもの、要するに
最大公約数的なサブセット(要するに使えねえ)って認識だったんだけど、そうでもないのかw
584デフォルトの名無しさん (ワッチョイ 355f-KGMb)
垢版 |
2021/07/12(月) 02:28:52.13ID:pg+kHsI00
>>538が正解じゃないの
どっちかだけってのがユーザーに不便強いてるよね
2021/07/13(火) 02:17:50.11ID:aO3Sze2Q0
変な質問だけどオフライン環境下でしか使わないアプリとかでも.netの更新はしなきゃいけない?
2021/07/13(火) 03:27:36.04ID:YaNuVgTh0
電文パケットを全て破棄出来るなら
要らないんじゃね?

工場レベルで汚染ってニュースもあるので
そこいらはクリアされてる前提で
2021/07/13(火) 11:33:09.20ID:oyMxwOQE0
C#でアプリ作れるようになったらC++で応用って効きますか?
C++でただ球が跳ねつづける画像とかパックンみたいの作ってみたくて学習始めたんですが
ロベールのコピーコンストラクタ辺りで何してるのかよくわからなくなってしまって
2021/07/13(火) 11:38:39.95ID:ugiVX/deM
それはC#もよく分かってないんじゃないかな
C#で値型と参照型を正しく理解していて、C++ではそれぞれがどう表現されるかが分かれば、
コピーコンストラクタがなぜ必要でどういう挙動をするかは自明なはず
589デフォルトの名無しさん (エムゾネ FF43-Keio)
垢版 |
2021/07/13(火) 11:40:40.89ID:WUJYnH4rF
C#とC++は全く別物
そりゃプログラミング未経験から学ぶのに比べればメリットあるけど
せいぜいその程度
590デフォルトの名無しさん (ワッチョイ cbbb-iyCa)
垢版 |
2021/07/13(火) 11:40:46.31ID:npKAmtA00
>>587
文法が似ているとかデザインパターンの学習が無駄にならないっていう限度でなら応用が効くでしょう
しかし、それぞれの言語で難点となっている部分が全くもって別なので、学習が大変な部分には全くと言って良いほど応用が効きません
591デフォルトの名無しさん (エムゾネ FF43-Keio)
垢版 |
2021/07/13(火) 11:41:00.44ID:WUJYnH4rF
場合によってはC#の知識がC++習得の邪魔をするかも知れないね
592デフォルトの名無しさん (エムゾネ FF43-Keio)
垢版 |
2021/07/13(火) 11:42:03.56ID:WUJYnH4rF
Keioワロス
2021/07/13(火) 11:55:37.64ID:oyMxwOQE0
何の言語もまだ習得してない素人なのですが、この目的だとC#あんまり意味ないですか。
本変えてもっかいC++挑戦してみます。ありがとうございました。
2021/07/13(火) 11:58:30.95ID:ugiVX/deM
>>591
俺はC#からの類推で自然に馴染めたけどな
C#からC++へ行くときのハマりポイントって多分RAIIの辺りだと思うけど、
C#においてオブジェクトが今どこにあるのかを意識してプログラミングしていればそんなにギャップはないと思う
2021/07/13(火) 12:07:48.76ID:gERGfhJva
C++だと学習のハードル高くない?
C#で取りあえず動くものを作りながら学ぶほうが良いと思う
2021/07/13(火) 12:24:59.34ID:dtNqNBdW0
初心者は、Ruby で、
まず、ファイル操作・文字列処理だけを学ぶのが良い

その後、他の言語をやるべき!
2021/07/13(火) 13:00:54.76ID:oMy7Gq1va
最終目的はC++の習得で、そのためにC#を学ぶことに意味があるか、
それともただ回り道になるだけで無意味かって意味なら、
まったく無意味とも言えない思う。

少なくともOOP的な部分については後発のC#の方が
いきなりキメラでカオスなC++でやるより理解が早い気がする。

案外最短コースはC→C#→C++かもしれんよ。
いや知らんけど。
2021/07/13(火) 13:21:11.88ID:bYykchBXM
>>596
お前はまず人間になろうな
2021/07/13(火) 18:46:02.70ID:gERGfhJva
C++, C標準関数, STL, MFC, ATL などなど覚えなきゃならない事がてんこ盛り
2021/07/13(火) 22:08:38.28ID:pN4fUUEP0
ただ、C++のvectorとかあのあたりはC#でListをやってからの方が理解は早いと思う
2021/07/14(水) 02:20:44.38ID:cEzLlJ010
でも、今はC++敷居下がってる
俺もずっと前にやったとき挫折したけど、数年前にやったらいけた
俺がその間に経験積んだのも事実だが、modern c++ってすげぇc++で作りやすくなってた
c++20でとりあえず低レベルなコルーチンきて?
c++23でasync/awaitな高レベルなインターフェース用意されるのかな
どんどん使い安くなってると思う
2021/07/14(水) 02:24:40.48ID:cEzLlJ010
それでもまぁC#の方を先にやってからの方が楽だと思うな
C++だとややこしいからとりあえずどうでもいいこととかに足をとられたり
するかのしれない
2021/07/14(水) 02:26:58.50ID:jkqZHJGB0
ネットで適当に検索して〜〜は無理だな
読めない
2021/07/14(水) 02:27:21.43ID:iC7aHD9J0
C++もany variant optionalなどが入ったからある程度はc#のマネージな考え方に近づいてるが、
今から始める人にはchar*とwchar_t*とwstringとstring に加えて u8string やu16string など文字列系がカオスだろなぁ。

しかもdll作る際は結局はインターフェースはプリミティブ型だけしとかないと、
まともに使えないdllになるから、テンプレートや新規に入った型も限定的な環境でしか役にたたんしw
2021/07/14(水) 02:33:39.69ID:cEzLlJ010
>>604
そうそれ。c++選択肢多いから、俺みたいに細かい人が最初やるには向いてない
文字列の話だって.netならutf -16の標準stringを取りあえず使っておけばいいけど
c++だとどのエンコード使おっかなとか下らない事で悩んで先に進まなくなる
2021/07/14(水) 02:41:48.38ID:veS53koK0
自分の場合、Windows の GUI アプリ作りたくて C++ 始めたけど、プログラム知識ほぼ 0 の時に、C + API と、C++ + MFC のGUI アプリのサンプルソース読んで一回諦めた。
C# 始めてから C++ 始めたことで救われた。

細かい所を確認しながら進めないと気が済まない + 目標までのハードルがめっちゃ高いと感じると心が折れる。
こんな人は、C++ の前に C# やるべき。
2021/07/14(水) 07:06:12.20ID:QQQ6x1zU0
C++にあっさり挫折した過去があるワイでも、C#だとそこそこに使えて助かってるわ
2021/07/14(水) 07:56:34.76ID:yzrBZN8qD
そりゃレイヤーが全然違うしね
2021/07/14(水) 09:48:23.28ID:gix7WKJqM
>>606
俺もそうだわ
C++はWINAPIだの仮想デストラクタだのと意味不明なお約束があまりにも多すぎて習得できる気がしなかった
C#の後だと重要なところと後回しでいいところの区別がついてすんなり入れたな
2021/07/14(水) 12:52:36.76ID:89AG2aEZ0
Formにポトペタで作れるしね。
2021/07/14(水) 14:05:49.07ID:XRr9+sqQ0
自分はWTLでGUIアプリ組んでたな
C#は食わず嫌いだったけど今はC#だけだな
2021/07/14(水) 17:04:04.00ID:gWKZTcc80
BorlandのC++builderでは作れたけどMFCアプリは作れなかったな
C++じゃなくMFCに問題があるんじゃなかろうか?
2021/07/14(水) 17:09:46.93ID:9x2VN1AY0
var test1 = メソッド1();
var test2 = メソッド2(test1)
var test3 = メソッド3(test2)

こんなふうに数珠繋ぎみたいに結果を渡していくやり方は作り方を見直したほうが良い?
メソッドの引数は値のコピーを渡してるから呼び出し元には影響ないのは分かるけど、どこでどの値を変えてるか分かりにくくなってバグを生み出しやすい作りな気もしてる
初歩的な質問で申し訳ないけどアドバイスいただきたい
2021/07/14(水) 17:28:30.06ID:+eseIR4Q0
test1とかtest2に使い道がないならば

var test3=method3(method2(method1()))

でもええって話ではあるけど
要は間の処理がどうなっているかによりけりだと思う
2021/07/14(水) 17:34:07.92ID:gix7WKJqM
>>613
うん、良くないね
君も気付いてる通り、引数のコンテキストがどんどん肥大化してどこで何やってんのか分からなくなる典型的なアンチパターンだ
ほんとにそのテスト2〜3は引数に渡されたオブジェクト全体を使ってるの?
やりたいことは、
var c = new C { A = test2(test1.X), B = test3(test1.Y) };
だったりしない?
2021/07/14(水) 17:50:29.76ID:QC3eIOjva
>>613
いいと思うよ
例えばだけどこういうことだろ?

基本価格 = 基本価格取得();
割引価格 = サマーキャンペーン割引(基本価格);
税込価格 = 消費税加算(割引価格);

とてもクリーンで見やすいコードじゃないか

ただタイピングが楽になるからメソッドチェーンにしたい欲求はある

基本価格取得()
 .サマーキャンペーン割引()
 .消費税加算();
2021/07/14(水) 18:16:23.00ID:gix7WKJqM
>>616
どこでどの値を変えてるか分かりにくくなりそうって言ってるから、単純なスカラー値ではないんじゃないの
var 注文 = 注文を取得();
var キャンペーン適用済み注文 = キャンペーン適用(注文);
var 送料計算済み注文 = 送料計算(キャンペーン適用済み注文);
みたいな感じと想像した
2021/07/14(水) 18:19:46.23ID:9x2VN1AY0
>>614 >>615
やっぱり良くないか…
引数に渡してるものは部分的にしか使ってない
例えば100個くらいの配列を渡してこの中の10個くらいしか使ってない

>>616
これはこの内容で良さそう
やる事が一貫してるというか意味が通じてるというか

最初に挙げた例と違って申し訳ないんだけど、実際にやりたいのはこんな感じ
数珠繋ぎとは少し違う、ごめん

@全装置データ = 装置A〜Zデータ取得()
A正常or異常 = 装置AデータDB書き込み(全装置データ)
B正常or異常 = 装置BデータDB書き込み(全装置データ)
.
.
.
C正常or異常 = 装置ZデータDB書き込み(全装置データ)
D正常or異常 = 装置へデータ書き込み(全装置データ)

メソッドに渡すのはコピーとはいえ、@で取得したデータを色んな所へ渡して使い回してて、どこかで値が変わってしまう可能性も含んでる作り方なのかなと思って>>613の質問に至ったの
2021/07/14(水) 18:32:18.26ID:aEJsAOR7a
>>618
結局何が聞きたいのかどうもよく分からないな。

>>613みたいに一時的な説明変数に戻り値を入れるのは
一般論としては何も悪くない。

引数で渡した参照型の値が破壊されるのを心配するなら(そんなのほとんどの場合杞憂だと思うけど)
適当なインターフェイスをかぶせてそのインターフェイスとして渡すか、
イミュータブルにするだけじゃないの?
2021/07/14(水) 18:50:03.34ID:gix7WKJqM
>>618
装置AデータDB書き込みは全装置データのうち装置Aのデータしか見ないってことか?
だったらそりゃ装置Aのデータだけを引数に渡したほうがいいわな
2021/07/14(水) 19:02:26.74ID:QC3eIOjva
>>617
その場合はその業務は誰の知識なのか?に注目する

メソッドの引数と返り値をスカラーにした場合、そのメソッドの「呼び出し側」が
1 引数のエンティティから適切な属性を取得し、2 メソッドを呼び出し、
3 引数そのものあるいはクローンに対して適切な属性を更新する
方法を「知らなければならない」

例えばサマーキャンペーン割引のロジックが「注文の合計基本価格が10000円以上、注文明細のどれか1つでもキャンペーン対象商品フラグが立っていること」だったらどうだろうか?

メソッドの呼び出し側はきっとこう思う筈だ
俺は注文をサマーキャンペーン割引して欲しいだけなのに、
なぜかサマーキャンペーン割引に合計基本価格と注文明細のキャンペーン対象商品フラグが必要だという業務知識を知らなければならない
ただ黙って割引してほしいだけなのに、なんで俺が適切な情報をいちいち与えてやらなければならんのだ
そんなのはサマーキャンペーン割引の責務を担うメソッドが知っているべきだろう
2021/07/14(水) 19:11:44.77ID:QC3eIOjva
>>618
この場合もまずは責務を明確にしてメソッドを分けるといいよ

1. オンメモリのデータセットから特定のデータを正確に抽出する責務を担ったメソッド
2. 単にデータをDBに書き込む責務を担ったメソッド

つまりこういうこと↓

a = Aデータ抽出(全データ)
b = Bデータ抽出(全データ)

z = Zデータ抽出(全データ)

結果A = リポジトリA.save(a)
結果B = リポジトリB.save(b)

結果Z = リポジトリZ.save(z)
結果All = リポジトリAll.save(全データ)
2021/07/14(水) 23:06:55.57ID:idSc395A0
>>618
>A正常or異常 = 装置AデータDB書き込み(全装置データ)

これって異常ならどうするの?
2021/07/14(水) 23:09:43.35ID:ikn1S79j0
>>618
メソッドの引数として渡したパラメータを書き換えないというのが基本
コピーして渡さないといけないメソッドとして作られてしまってるのが問題で、更新日時とか何かしらの書き換えがあるならその結果を別途返すべき

メソッドのパラメータとして全データを渡すよりそのメソッドが使う必要最低限のものにしといた方がわかりやすい
まあ、条件にマッチしないデータは無視するという動作でも不自然じゃないからそんなに重要なことじゃないかな
2021/07/15(木) 18:33:23.51ID:YvGaZ0G0M
レスくれた人ありがとう
貰ったアドバイスを自分なりにもうちょい整理してみる

>>622
細かくなるけど必要なもの毎に処理を分けるってことだよね
自分みたいな素人目線だとこういうのは小さい処理が増えるのが煩雑に感じてやるのは躊躇するけど一個一個が独立してるしこの方が結果的に良さそう
2021/07/15(木) 18:53:56.43ID:p7EIkR62a
1つのメソッド(動作)に複数の動作をやらせない
2021/07/16(金) 05:44:43.56ID:kw030b9nd
>>626
そういうの好きだな。だから、結果的に>>613になっても俺的にはおk。
メソッド名を見れば判るようになるし。
628デフォルトの名無しさん (ブーイモ MMde-uKKI)
垢版 |
2021/07/16(金) 10:50:53.05ID:5OijHeJ1M
AWS LambdaをC#で使ってる人おる?
DIの正しいやり方がわからん
ググると
FunctionクラスのデフォルトコンストラクタでServiceCollectionをインスタンス化して
Serviceを追加して解決してprivateフィールドに代入
的なコードは出てくるんだけど
なんか無理矢理感があってすごく気持ち悪い
ASP.NET CoreのControllerみたいにコンストラクタインジェクションしてくれればいいんだけどAWS LambdaのFunctionはそういうのないのかな
2021/07/16(金) 12:25:27.67ID:Oq98um8EM
謎のランタイムが勝手にどっかで注入してくる方が気持ち悪いわ
Azure FunctionsなんかだとAzure側のランタイムがASP.NETと統合されてて注入できたりするけど、依存関係地獄になりがちでぶっちゃけ糞
Lambdaはその点余計なこと一切しないから単純明快で楽だ
そもそもLambdaごときにいちいちDIなんか要らんわ
FaaS使うんだったら差し替えはFunctionレベルでやるのが基本だよ
2021/07/16(金) 12:44:52.48ID:Oq98um8EM
WindowsってPowerShell以前はコマンドラインシェルが貧弱だったから、開発者は伝統的に何でもかんでもアプリケーションコードの箱庭内でやってしまう傾向があって、
Azure Functionsの設計思想なんかもそういう箱庭コーディングの文化を引き継いでいるところがある
対してAWSは小物をシェルで組み合わせて使うUNIX的な文化の色が強くて、Lambda関数もコーディング環境というよりはあくまで「ちゃんと単独で機能する小さなコマンド」なの
その中でさらにドメイン切って差し替えられるようにして、みたいな発想はしないんだよ
631628 (ブーイモ MMde-uKKI)
垢版 |
2021/07/16(金) 13:41:32.46ID:YjA+/kj2M
すまん自己解決したわ
AWSオフィシャルのLambda/ASP.NET Coreアダプタがあるらしい
まあそらそうだよなDIもまともに出来ないとかゴミサービスでしか使えんし
2021/07/17(土) 01:55:18.52ID:YUa2zwOi0
最終的に保守のしやすいコードが一番ってことになりそうだ
2021/07/17(土) 04:37:12.67ID:SWDN49PP0
どうでもいいけど、状況判定に
if(HogeButton.Text == "あ" && !int.TryParse(HageButton.Text,out _))
みたいにコントロールのテキスト使いまくってるクラス見つけてしまった。

明日から犯人探しかな・・・
634デフォルトの名無しさん (ブーイモ MMde-nkhS)
垢版 |
2021/07/17(土) 05:05:25.92ID:rQBsLn9RM
どうでもいいけど、状況判定に
if(HogeButton.Text == "ほ" && !int.TryParse(HageButton.Text,out _))
みたいにコントロールのテキスト使いまくってるクラス見つけてしまった。

明日から犯人探しかな・・・
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況