請各位前輩指導下簡練代碼的思路?

小弟初學.net mvc,做了一個簡單項目帶動自己學習。這是做出的項目視圖的一部分:

點擊修改需要向後台傳遞數據,我是用ajax提交的,而且是一個個提交的,下面代碼是【周任務】一欄【點擊修改】的代碼,後面的其它各欄都是此代碼的重複,只是傳遞的參數不一樣。

後台也只好一個個接收,其中一個接收方法:

這樣寫是可以實現效果的,但代碼超多,而且都是重複代碼,請教下各位,有沒有其它更簡練的辦法實現效果。求指導一下思路。


你先做這幾步:

1、寫一大堆代碼。

2、標記出重複的部分。

3、剩下的代碼思考一下能不能改成相似的形式,從而擴大重複的部分。

4、重新組織代碼把重複的部分放到一起,避免穿插不重複的代碼。

5、將代碼用空行和花括弧分成職能相對單一的代碼塊。

接下來就是一些具體的消重方法了:

1、對於簡單的沒有控制流的,輸入輸出都很簡單的代碼,直接抽出成方法,用VS的重構工具抽取。

2、如果有複雜的控制流,剪枝縮減控制流,並且嘗試讓重複的代碼覆蓋所有分支,即可抽出方法,不能抽出成一個方法,也可以根據分支抽出不同方法。

3、對於前後重複,中間不同的代碼,將不同部分抽出,作為一個函數參數傳入。

4、使用基於約定消滅mapping代碼。

另外對於初學者一個很重要的事情就是不要提前抽象代碼,不要提前消重,先寫出重複的代碼,再對代碼進行消重工作。


瀉藥。按照你目前代碼體現的能力來說,知乎問針對代碼的指點意義不大。

如何獲得簡練代碼的思路?你需要做的是:

  • 大量寫代碼(可以先不要管代碼好看不好看)

  • 學習大公司(google,microsoft之類)的代碼規範
  • 學習使用各種框架並比較
  • 讀面向對象敏捷開發設計相關的書籍
  • 讀分層和設計模式的書籍

你現在體現出來的問題有:

  • 命名不規範
  • 事件選用不合適
  • 該使用局部變數的地方不使用
  • 冗長的判斷條件
  • SQL注入
  • 無異常檢查
  • 功能沒有合適的封裝


新入坑我就不打擊你了,答案中有人打擊得夠狠的了,令我氣憤的是,那傢伙打擊完還要誤導人,新手多看多想有個毛蛋作用啊,真正的指導是多干,通過海量的入門和強化訓練進行提高。

我不怕告訴你,打擊你的那人說得一點沒錯,確實垃圾,但是這又有什麼關係呢?新手不都是這樣成長起來的嗎,背景碾壓的請無視。

我剛開始的學習的時候連聲明個int num=0都要問老師num是什麼意思,你能想像老師看我的眼神嗎(逃)。

現在先不要想重構,正確的做法是多練,再多看多想,到時候自然各種設計模式、提練重構自然而然的就出來了,根本不用想的好嗎?


後端弄成一個方法

前端遍歷一下li 加上click監聽


寫的不錯,我看懂了,加油。


js 部分垃圾,不用事件代理是敗筆,拿用戶輸入拼接 HTML 敗筆,隱含的重複綁定事件敗筆,沒有事件節流會造成重複觸發敗筆,只有success 沒有fail 敗筆,只有if 沒有else 敗筆。

服務端部分更完蛋,拼接SQL 敗筆,臟讀敗筆,你這裡其實一個 upsert 搞定。


1.買本代碼大全。

2.簡練代碼不是一蹴而就的,原則是把代碼當文章,要自己看得爽,別人看得爽。如果你有朋友也干這個的話,拿給他們看看,相互吐槽一下,慢慢提高。


題主有這個意識非常好.

簡化方法其他答主說的很全面了,我要提醒的是不要著急,代碼簡化就算很多老手都未必敢說能做到盡善盡美,多多實踐,這是一個水磨功夫,因為從根本上說這種工作考驗的是洞察力.


大家都說的在理 多多刷代碼 量上去了經驗就多了

重複的代碼記重構 重構 重構 重要的事情要說三次

上面2張圖片貌似可以解決你的一些疑惑


找本關於重構的書看下就明白了


你這代碼並非不夠簡練,實際上在不藉助框架的前提下高手寫這個功能我,差不多也是這些代碼。

你這代碼的問題是,邏輯錯誤。只看前端,你在 click 事件響應中綁定 blur 事件,意欲何為?


推薦閱讀:

IoC/AOP 這些開發範式為什麼在 .NET 平台上沒有被廣泛採用?
C# 是使用引用計數來發現垃圾對象的嗎?
反編譯DLL問題?

TAG:編程 | NET | C# | ASPNETMVC |