據說你開發.NET還在用VS,小哥哥給你推薦全平臺的Rider

本文地址:http://www.cnblogs.com/likeli/p/8461010.htmlhtml

前言

.NET平臺的開發一直都只能使用Visual Studio來開發,自從dotnet core 發佈後不久,jetbrains 發佈了Rider預覽版,到目前爲止的正式版2017.3.1。博主都使用過,由於博主的主力開發語言是C#,因此一直以來被捆綁到Windows平臺不得動彈許久,無比渴望有一個可以跨平臺玩兒玩兒的IDE,既然core都有了,那就只差一款順手的IDE。前端

如下發言不是爲了對比各個IDE,是爲了表述我在使用過程當中的心理活動linux

Visual Studio

這貨你們應該無比熟悉,號稱宇宙第一IDE,在.NET平臺下擁有幾乎不可替代的重要性,沒有了這貨,絕大部分人都沒法開發了。數據庫

好了,功能強大那是重要的,性能也不錯,可是。。。這貨太臃腫了,有木有,我僅僅想要開發個Web API,可是使用VS,個人安裝一個不下10GB的IDE。windows

Visual Studio For Mac

這是微軟爲了拉攏Mac環境開發者的橄欖枝,可是這個橄欖枝仍是太嫩了,各類工具殘缺,莫名其妙的BUG。visual-studio-code

剛發佈的時候,我經過 官方在線安裝 進行安裝,不知道是由於qiang的問題,一直超時,後來經過網友提供的地址直接下載了完整的安裝包,進行安裝的。後端

當時的第一印象,是:握草,這東西是Bate版吧,太草率了~試用了一陣後,就卸載了,根本沒法在正式環境下使用。app

最近,再次安裝了一次,仍是沒法經過官方的在線安裝進行安裝,差評!再次嘗試幾回後,發現BUG少了許多,性能和實用性仍是太差太差。編輯器

Visual Studio Code

我平時用這個編輯器開發Python腳本和簡單的Go程序,由於打開快速,可是始終以爲,這是一個文本編輯器,而不是一個IDEide

Jetbrains Rider

正主來了,我使用Rider從測試預覽版到目前最新的正式版至少有了一年的時間了(Windows、Mac、Ubuntu),通過我這些時間的使用,我也發現了這個IDE不少亮點,著名的VS插件ReSharper可能不少人都用過,此款IDE就是基於ReSharper開發的,全部ReSharper擁有的特性他都有,另外還加入了Jetbrains家族的強大功能,好比Git操做,Unit Test、Docker集成等等。

來來來,我列舉一部分讓你們嚐嚐鮮。先說一下個人使用場景,我通常是作後端API開發還有少許的配套API作的UI,因此偏後端些,可是這個IDE對前端的支持一點也不差。

下載最新版,激活,運行一下:

目前還提供常見的前端模板建立

這是建立的目錄

自定義的格式化方式

我最喜歡的一鍵加入Docker

Jetbrains Rider 更多

只要是Resharper擁有的特性,這個IDE都有,傳送門這是最新版特性的介紹,更多的就去看看,強推!

Jetbrains Rider 根據數據庫查詢結果快速生成DTO類

映像中DTO類的編寫一直是各類麻煩,重複又無心義,特別是做爲Web API服務的時候,須要提供無數的DTO映射類!

這個痛點能夠藉助Rider的groovy腳原本快速解決,以下圖,我寫了兩個groovy的腳本,編寫腳本很簡單,並且能夠在腳本中混合使用Java語法~

這兩個腳本 Param-Groovy.cs.groovyproto-Groovy.cs.groovy都是我用來生成DTO類的,其中proto使用來生成ProtoBuffer的DTO類

腳本的使用方法,在Rider右側的數據庫欄,選擇編輯SQL腳本,簡單的select一些數據後,出現以下的結果欄,切換紅框中的選項到proto-Groovy.cs.groovy,而後選擇一行按Ctrl + C進行復制,而後在代碼編輯器中Ctrl + V粘貼出來

這個DTO就生成好了。

依此類推,也能夠經過這種自定義腳本的方式,直接根據整個數據庫生成POCO類喲!

一下是兩個腳本的代碼:

Param-Groovy.cs.groovy

SEP = ", "
QUOTE    = "\'"
NEWLINE  = System.getProperty("line.separator")

def record(columns, dataRow) {
    columns.eachWithIndex { item, idx ->
        OUT.append("/// <summary>\n")
        OUT.append("/// \n")
        if (dataRow.value(item) != null) OUT.append("/// eg: ${dataRow.value(item)}\n")
        OUT.append("/// </summary>\n")
        OUT.append("public string " + captureName(item.name()) + " { set; get; } \n\n")
    }
}

ROWS.each { row -> record(COLUMNS, row) }

public static String captureName(String name) {
    return name.substring(0, 1).toUpperCase() + name.substring(1);
}

proto-Groovy.cs.groovy

/*
* Available context bindings:
*  COLUMNS    List<DataColumn>
*  ROWS        Iterable<DataRow>
*  OUT        { append() }
*  FORMATTER  { format(row, col); formatValue(Object, col) }
*  TRANSPOSED  Boolean
* plus ALL_COLUMNS, TABLE, DIALECT
*
* where:
*  DataRow    { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
*  DataColumn  { columnNumber(), name() }
*/

SEP = ", "
QUOTE    = "\'"
NEWLINE  = System.getProperty("line.separator")

def record(columns, dataRow) {
    columns.eachWithIndex { item, idx ->
        OUT.append("/// <summary>\n")
        OUT.append("/// \n")
        if (dataRow.value(item) != null) OUT.append("/// eg: ${dataRow.value(item)}\n")
        OUT.append("/// </summary>\n")
        OUT.append("[ProtoMember(${idx + 1})] \n")
        OUT.append("public string " + captureName(item.name()) + " { set; get; } \n\n")
    }
}

ROWS.each { row -> record(COLUMNS, row) }

public static String captureName(String name) {
    return name.substring(0, 1).toUpperCase() + name.substring(1);
}

最後

Jetbrains家有不少的IDE,你們能夠去看看,開發.NET並不是必定要使用VS,去外面的世界看看吧。

相關文章
相關標籤/搜索