ฉันเพิ่งดำเนินการ 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เสียงเหมือนว่ามันควรจะไม่เปลี่ยนรูป แต่อาจมีกลยุทธ์ที่แตกต่างกันซึ่งได้รับการคัดเลือกในการสร้าง