ฉันเพิ่งดำเนินการ refactoring ของโครงการขนาดกลางใน Java เพื่อกลับไปและเพิ่มการทดสอบหน่วย เมื่อฉันรู้ว่ามันเจ็บปวดแค่ไหนในการล้อเลียนและสถิตยศาสตร์ในที่สุดฉันก็ "ได้รับ" สิ่งที่ฉันได้อ่านเกี่ยวกับพวกเขาตลอดเวลานี้ (ฉันเป็นหนึ่งในคนเหล่านั้นที่ต้องเรียนรู้จากประสบการณ์โอ้สบายดี)
ดังนั้นตอนนี้ที่ฉันใช้ Spring เพื่อสร้างวัตถุและโยงเข้าด้วยกันฉันจะกำจัดstatic
คำหลักไปทางซ้ายและขวา (ถ้าฉันอาจต้องการเยาะเย้ยมันก็ไม่คงที่ในความหมายเดียวกับที่ Math.abs () ใช่ไหม?) สิ่งนี้คือฉันได้รับนิสัยการใช้static
เพื่อแสดงว่าวิธีการไม่ได้พึ่งพา ในสถานะวัตถุใด ๆ ตัวอย่างเช่น:
//Before
import com.thirdparty.ThirdPartyLibrary.Thingy;
public class ThirdPartyLibraryWrapper {
public static Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
ThirdPartyLibraryWrapper.newThingy(input);
//After
public class ThirdPartyFactory {
public Thingy newThingy(InputType input) {
new Thingy.Builder().withInput(input).alwaysFrobnicate().build();
}
}
//called as...
thirdPartyFactoryInstance.newThingy(input);
ดังนั้นนี่คือสถานที่ที่จะได้สัมผัสงอนงง ฉันชอบวิธีเดิมเพราะตัวพิมพ์ใหญ่บอกฉันว่าเหมือนกับ Math.sin (x) ThirdPartyLibraryWrapper.newThingy (x) ทำสิ่งเดียวกันทุกครั้ง ไม่มีสถานะของวัตถุที่จะเปลี่ยนวิธีที่วัตถุทำในสิ่งที่ฉันขอให้ทำ นี่คือคำตอบที่เป็นไปได้ที่ฉันกำลังพิจารณา
- ไม่มีใครรู้สึกแบบนี้ดังนั้นจึงมีบางอย่างผิดปกติกับฉัน บางทีฉันอาจยังไม่ได้ทำให้วิธีการทำสิ่งต่าง ๆ เป็นจริง OO! บางทีฉันอาจจะเขียนเป็นภาษาจาวา แต่กำลังคิดในภาษา FORTRAN หรือบางอย่าง (ซึ่งน่าประทับใจเพราะฉันไม่เคยเขียน FORTRAN เลย)
- บางทีฉันอาจใช้ staticness เป็นพร็อกซีสำหรับการเปลี่ยนแปลงไม่ได้เพื่อวัตถุประสงค์ในการให้เหตุผลเกี่ยวกับรหัส ที่ถูกกล่าวว่าฉันควรมีปม ในรหัสของฉันสำหรับคนที่มาพร้อมที่จะรักษามันให้รู้ว่ามีอะไร stateful และสิ่งที่ไม่?
- บางทีนี่น่าจะมาฟรีถ้าฉันเลือกอุปมาอุปมัยที่ดี? เช่น
thingyWrapper
ไม่มีเสียงเหมือนว่ามันมีรัฐอิสระของห่อThingy
ซึ่งตัวเองอาจจะไม่แน่นอน ในทำนองเดียวกันthingyFactory
เสียงเหมือนว่ามันควรจะไม่เปลี่ยนรูป แต่อาจมีกลยุทธ์ที่แตกต่างกันซึ่งได้รับการคัดเลือกในการสร้าง