2021 年的 【#針對遺留代碼加入單元測試的藝術】梯次 8/26 00:00 開始公開報名囉,上課日期在 2021/1/9 (六)。( 8/25 下午開放給前一梯次的等待隊列學員報名,目前已有 8 位報名成功)
《我不需要看簡介就手刀報名》:https://docs.google.com/forms/d/e/1FAIpQLScEXdcziYwugx4TXwkO0zXOq6lJ110knnk-egzXM8HxhT_OUA/viewform
《這門課能幫助我解決哪些問題》:https://dotblogs.com.tw/hatelove/2020/08/21/Unit-testing-effectively-with-legacy-code-202101
雖然 #單元測試 以及 #遺留代碼 的概念是不分語言的,但是這門課我能 live demo 的語言還是有限的,目前 live demo 的語言限定在 Java, PHP, C#, Python。上課的內容、步驟、題目與解答,則也有支援 Kotlin 的版本。(期待自己能在 2021 年一月的時候,支援 node.js 的版本)
Ruby 我只能提供相關的 reference。
※ 註:如果你有預算與流程上的相關需要,可開立今年的三聯式發票,不用等到上課唷。
「依賴注入java」的推薦目錄:
依賴注入java 在 91 敏捷開發之路 Facebook 的最佳貼文
敲碗敲到碗快破了嗎?是的,【#針對遺留代碼加入單元測試的藝術】今年十一月梯次,預計加入支援 #Python 與 #Kotlin 了!
課程介紹與報名:https://dotblogs.com.tw/hatelove/2020/05/08/Unit-testing-effectively-with-legacy-code-202011
—
Kotlin 本身的語言特性讓單元測試沒那麼容易寫,然而框架則優雅地解決了這問題。
Python 本身的語言特性則讓單元測試非常好寫,但因為 Python 寫法太自由,所以因應不同的寫法,要有對應不一樣的解決方式。(例如其他語言都以 class/struct 為基底, Python 跟 JavaScript 卻可以直接以 function 為基本元素)
—
#註:因為十一月梯次開始的內容同時支援 C#, Java, Kotlin, PHP, Python 五個語言,上課示範將以學員使用最多的語言進行 live coding,以及若在該 lab 不同語言可能有特別值得一提的關注點,也會額外拉出來講解。
各種語言我都會提供對應的 repository 與每個step 的 commit history, 每個段落也都有每一步的操作影片,供上課時學員可以對著 commit history 在 IDE 上練習,所以請不用擔心跟不上,或是聽懂卻無法跟著實作的問題。
重點在概念,上課或課後的實作練習,有完整的 branch, commit history (重點筆記都在 commit comments 上了),以及對應的影片可以參考。
不怕你練,怕你不練。不怕你問,怕你不問。
—
需求跟問題是中性的,是不分語言的。撇除語言特性不說,在 legacy code 上要加入單元測試,會碰到的問題萬變不離其宗,學會這個核心的概念,你就不會再怕 legacy code 了。
—
今天晚上我會把 python 的內容也補上該課程介紹中。
該梯次目前只剩下 #四個位置,錯過就等2021 吧。
依賴注入java 在 91 敏捷開發之路 Facebook 的精選貼文
趨勢科技內訓:【#針對遺留代碼加入單元測試的藝術】
※ 沒想到 Java, C#, PHP 三刀流還不夠。(後面還要補三刀: Python, C++, Go,啥? 你問 JavaScript? JavaScript 的重點不是邏輯上的 unit test 啦...)
※ 今天全程以 Java 為預設示範語言,C#, PHP 為輔助。
學員中還有純 QE/SDET 跟 F2E 的,不過整體來說,大家只有一開始對不熟悉的 IDE 有些卡卡的,後面開始帶入單元測試、隔離相依、依賴注入設計,以及測試導入策略,就非常順了。(趨勢的工程師功力還是很純的啊,吸~~~)
※ 非相簿的照片有限,晚點把完整的 feedback 分享到相簿中
PS: 雖然十月份的梯次(https://dotblogs.com.tw/…/unit-testing-effectively-with-leg…)公開名額已經額滿,但我打算每經過一次【針對遺留代碼加入單元測試的藝術】的公開課或內訓,我就會再釋出一位報名名額。
所以,從現在開始,依照報名表單的順序為主,釋出一個名額供大家報名。
錯過了十月這一梯,就是再等五個月以上。
※ 再次聲明一下,我真的不是賣工具的 XD 純粹只是大家之前「很少見過開發跟重構,能這麼行雲流水」,所以那個吸睛跟震撼的效果,有些搶掉主題了 Orz
依賴注入java 在 使用依赖注入取代硬连接资源| effective-Java - GitHub Pages 的推薦與評價
《Effective Java 第三版》学习笔记. ... 这是依赖项注入(dependency injection)的一种形式:字典是拼写检查器的一个依赖项,当它创建时被注入到拼写检查器中。 ... <看更多>
依賴注入java 在 05. 依赖注入优于硬连接资源(hardwiring resources) - GitHub 的推薦與評價
effective-java-3rd 中文版https://sjsdfg.github.io/effective-java-3rd-chinese - effective-java-3rd-chinese/05. 依赖注入优于硬连接资源(hardwiring ... ... <看更多>
依賴注入java 在 [請益] Spring boot的依賴注入降低耦合的例子- 看板Soft_Job 的推薦與評價
推文有個連結有解答我的疑惑
感謝bron大
文章有點長
先說說我對依賴注入的理解
Spring boot
依賴注入大致有三種方式
透過建構子的 透過setter的 或是 field
這三種都可以透過@Autowired註解來達到依賴注入的效果
我自己想到的建構子的舉例是
假設有兩個類 Address 和 Employee好了
1.
public class Address {
String Country;
String City;
String Street;
public Address(String country, String city, String street) {
Country = country;
City = city;
Street = street;
}
}
2.
public class Employee {
String sex;
String name;
Address address;
// 沒有依賴注入的方式
public Employee(String Country,String City,String Street,String
sex, String name ) {
this.sex=sex;
this.address = new Address( Country, City,Street );
this.name=name;
}
// 有依賴注入的方式
public Employee(String sex, String name, Address address) {
this.sex = sex;
this.name = name;
this.address = address;
}
}
在上面的例子當中可以發現,如果哪一天
Address這個類新增了一個屬性叫 phoneNumber好了
沒有依賴注入的方式,必須要更改 Employee 的
this.address =new Address(Country,City,Street,phoneNumber)
而有依賴注入的方式確實降低了耦合
因為他不用更改Employee的建構方式
所以我理解依賴注入可以降低耦合
所以我理解依賴注入可以降低耦合
所以我理解依賴注入可以降低耦合
但我的問題是Spring boot 的 autowird annotation 有幫助我們降低耦合嗎
在常見的開發中 我們經常都會有 Dao 以及 Service
假設我有兩個 Dao 好了 分別是 Dao1 和 Dao2
以及一個Service
Dao1
public class Dao {
public void sayhi() {
System.out.println("hello");
}
}
Dao1
public class Dao {
public void sayhi() {
System.out.println("hello");
}
}
Dao2
public class Dao2 {
public void saygoodbye() {
System.out.println("say goodbye");
}
}
如果我不在service上面使用autowired
我的service會是
public class Service {
Dao1 dao=new Dao1();
Dao2 dao2=new Dao2();
public void sayhi() {
dao.sayhi();
}
public void saygoodbye() {
dao2.saygoodbye();
}
}
如果我使用了@Autowired註解
那我只是將
Dao1 dao=new Dao1();
Dao2 dao2=new Dao2();
替換成
@Autowired
Dao1 dao
@Autowired
Dao2 dao2
我想請問所以我使用了Autowired註解
我知道我可以不需要使用new 來建構實體
但 Spring 真的有幫我降低耦合嗎
即使我換成 setter 配合 autowired的方式好了
那個 setter也是要我自己去撰寫
Spring 幫我降低了耦合甚麼?
我的問題簡單來說就是
我知道依賴注入可以降低耦合
但Spring boot透過 @Autowired註解幫我降低耦合在哪
謝謝
p.s 因為面試的時候常常被面試官問說懂不懂甚麼是
控制反轉還有DI,我基本上舉例都舉 Address還有 Employee的例子
但當我反問下面例子的時候,他們好像也說要再回去想一下...
只有其中一個就說更複雜的例子會用到,但也沒說甚麼是更複雜的例子QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.167.157.11 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1648731970.A.382.html
※ 編輯: ntpuisbest (49.216.186.239 臺灣), 03/31/2022 21:14:38
@RestController
public class Controller {
Service service=new Service( );
@GetMapping("test")
public void saysomething() {
service.saygoodbye();
service.sayhi();
}
}
即使Service 裡面需要20個DAO好了
在Controller裡面new Service不也一樣只要
一行
Service service=new Service( );
另外如果是setter 或是 Constructor方式的 DI
就我的理解 setter和建構子也是要自己寫
Spring 不會幫你產生
那我這樣看起來好像只是幫你從 new 換成了 @Autowired
這樣真的看不太出來 降低了甚麼耦合
因為建構子也是要自己寫啊
我覺得我好像陷入了泥淖中了QQ
翻了很多網頁,舉的例子大都跟我自己舉的 員工還有地址的差不多
※ 編輯: ntpuisbest (118.167.157.11 臺灣), 03/31/2022 22:36:56
感謝上面所有大大
尤其是bron大,謝謝
ok 謝謝,我對介面的理解只有降低耦合
但跟di的關聯還沒補上
謝謝
※ 編輯: ntpuisbest (49.216.186.239 臺灣), 04/01/2022 00:35:55
... <看更多>