วันนี้คุณรู้จัก SOLID
หลักการออกแบบโปรแกรมเชิงวัตถุ ที่ดีหรือยัง ว่าเป็นยังไง?
.
SOLID เป็นหลักการออกแบบการเขียนโปรแกรมเชิงวัตถุที่ดี (Object Oriented Design) นำเสนอโดย Robert C. Martin (ลุง Bob. )
:
SOLID ไม่ได้หมายถึง "ของแข็ง"
แต่มันมาจากชื่อพยัญชนะแรกของ 5 คำต่อไปนี้
- Single-responsibility Principle
- Open-closed Principle
- Liskov substitution principle
- Interface segregation principle
- Dependency Inversion principle
:
รายละเอียดก็จะประมาณเนี่ย สรุปให้คร่าวๆ
👉 1) Single-responsibility Principle
หลักการนี้ จะให้คลาส 1 อัน รับผิดชอบงานเดียว
ถ้าอนาคตจะมี change เกิดขึ้น
ก็เปลี่ยนเฉพาะงานนี้งานเดียว ที่คลาสนี้ที่เดียวเท่านั้น
จะไม่มีการ change มากกว่า 2 งานภายในคลาสเดียวกันประมาณเนี่ย
มิฉะนั้นจะตีกันตายได้
:
👉 2) Open-closed Principle
หลักการนี้ อ็อบเจ็กต์ หรือพวก คลาส มอดูล ฟังก์ชั่น แพ็กเกจ ไลบรารี่
เมื่อสร้างแล้วก็ควรฟิกไว้ ไม่ควรแก้ไข (เพราะมันอาจเทสเรียบร้อยแล้ว)
ถ้ามี change เกิดขึ้นมา ก็ต้องเปิดโอกาสให้ขยายต่อเติมได้
โดยเราจะไม่ไปแตะต้องโค้ดที่เคยเขียนขึ้นมาเด็ดขาด
:
👉 3) Liskov substitution principle
มันพัฒนามาจากหลักการข้อ 2 อีกที กล่าวคือ
คลาสแม่ควรจะฟิกไว้ ไม่ควรแก้ไข ไม่ควร change อีกแล้ว
(เพราะอาจเทสเรียบร้อย หรือออกแบบมาเรียบร้อย)
ถ้าจะ change ก็ให้ไปลงที่คลาสลูกเลย
โดยให้สร้างคลาสลูก ที่ขยายมาจากคลาสแม่อีกที
.
สำหรับหลักการข้อ 3 นี้ คลาสลูกจะสามารถเสียบแทนที่คลาสแม่ได้
โดยจะไม่ไปแก้ไขหน้าที่ (functionality) ของโค้ดหลักทั้งหมด
:
👉 4) Interface segregation principle
การออกแบบ interface ที่ดี ควรมีเมธอดที่จำเป็นเท่านั้น
คลาสลูกที่มา implement ไม่ควรได้เมธอดที่ไม่จำเป็นเกินมา
.
กล่าวอีกนัยหนึ่งการออกแบบ interface ที่ดี
ไม่ควรให้ interface มันทำงานครอบจักราล
ไม่ต้องใจดี เผื่อเมธอดเกินมา
ให้มีพอเพียง พอดีกับคลาสลูกก็พอนะครัช
:
👉 5) Dependency Inversion principle
หลักการนี้จะกล่าวถึง
- High level classess (อาจมองว่าเป็นมอดูลที่มีแต่ business logic ที่ซับซ้อนก็ได้)
- กับ Low Level Classes (อาจมองว่าเป็นมอดูลที่มีแต่ logic พื้นฐาน ทำงานระดับล่างๆ)
.
ซึ่ง class ทั้งสองระดับดังกล่าว
เวลาจะติดต่อกัน ก็ให้ทำผ่านทาง Abstraction Layer เท่านั้น
ไม่ควรติดต่อกันตรงๆ โต้งๆ
.
Abstraction Layer ก็คิดง่ายๆ
มันก็คือ Interface หรือ abstraction class นั่นแหละ
คือมีแต่รายละเอียดให้รู้เฉยๆ ยังไม่มีส่วน implements
เพราะเดียวจะมีคลาสมา implements แล้วมา plugin เสียบเข้าภายหลัง
.
..เขียนเป็นภาพก็ประมาณเนี่ย
High Level Classes --> Abstraction Layer --> Low Level Classes
:
++++++++
สำหรับคอนเซปต์ SOLID อาจยากต่อการเข้าใจนิดหนึ่งนะ
มันต้องเห็นโค้ดตัวอย่างด้วย
ยิ่งถ้าใครไม่เชียวชาญการเขียนโปรแกรมเชิงวัตถุ (Object Oriented programming)
หรือไม่ได้ลงมือเขียนจริงๆ จังเท่าไร
ก็อาจสงสัยมีมันทำไม?
.
แต่ทว่าการเขียนโปรแกรมเชิงวัตถุ ถ้าออกแบบไม่ดีนี้ ....บอกตรงๆ
..โค้ดจะเละ เทอะทะ ใหญ่โต
..อ่านโค้ดก็ยาก ย๊าก คลาสเยอะแยะมากมาย
.
ยังไงอ่านเพิ่มเติม ดูโค้ดตัวอย่างที่ออกแบบตามหลัก SOLID
ตามลิงค์นี้เขียนดี
https://www.oodesign.com/design-principles.html
https://scotch.io/…/s-o-l-i-d-the-first-five-principles-of-…
.
😘 โชคดีทุกท่านครับ ไปแหละ
เขียนโดยโปรแกรมเมอร์ไทย thai programmer
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「open closed principle」的推薦目錄:
- 關於open closed principle 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的最佳解答
- 關於open closed principle 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的精選貼文
- 關於open closed principle 在 Milton Goh Blog and Sermon Notes Facebook 的最佳貼文
- 關於open closed principle 在 コバにゃんチャンネル Youtube 的最讚貼文
- 關於open closed principle 在 大象中醫 Youtube 的最佳解答
- 關於open closed principle 在 大象中醫 Youtube 的最佳解答
- 關於open closed principle 在 Open/Closed principle query - Stack Overflow 的評價
- 關於open closed principle 在 How to adhere to the open-closed principle in practice 的評價
open closed principle 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 的精選貼文
วันนี้คุณรู้จัก SOLID
หลักการออกแบบโปรแกรมเชิงวัตถุ ที่ดีหรือยัง ว่าเป็นยังไง?
.
SOLID เป็นหลักการออกแบบการเขียนโปรแกรมเชิงวัตถุที่ดี (Object Oriented Design) นำเสนอโดย Robert C. Martin (ลุง Bob. )
:
SOLID ไม่ได้หมายถึง "ของแข็ง"
แต่มันมาจากชื่อพยัญชนะแรกของ 5 คำต่อไปนี้
- Single-responsibility Principle
- Open-closed Principle
- Liskov substitution principle
- Interface segregation principle
- Dependency Inversion principle
:
รายละเอียดก็จะประมาณเนี่ย สรุปให้คร่าวๆ
👉 1) Single-responsibility Principle
หลักการนี้ จะให้คลาส 1 อัน รับผิดชอบงานเดียว
ถ้าอนาคตจะมี change เกิดขึ้น
ก็เปลี่ยนเฉพาะงานนี้งานเดียว ที่คลาสนี้ที่เดียวเท่านั้น
จะไม่มีการ change มากกว่า 2 งานภายในคลาสเดียวกันประมาณเนี่ย
มิฉะนั้นจะตีกันตายได้
:
👉 2) Open-closed Principle
หลักการนี้ อ็อบเจ็กต์ หรือพวก คลาส มอดูล ฟังก์ชั่น แพ็กเกจ ไลบรารี่
เมื่อสร้างแล้วก็ควรฟิกไว้ ไม่ควรแก้ไข (เพราะมันอาจเทสเรียบร้อยแล้ว)
ถ้ามี change เกิดขึ้นมา ก็ต้องเปิดโอกาสให้ขยายต่อเติมได้
โดยเราจะไม่ไปแตะต้องโค้ดที่เคยเขียนขึ้นมาเด็ดขาด
:
👉 3) Liskov substitution principle
มันพัฒนามาจากหลักการข้อ 2 อีกที กล่าวคือ
คลาสแม่ควรจะฟิกไว้ ไม่ควรแก้ไข ไม่ควร change อีกแล้ว
(เพราะอาจเทสเรียบร้อย หรือออกแบบมาเรียบร้อย)
ถ้าจะ change ก็ให้ไปลงที่คลาสลูกเลย
โดยให้สร้างคลาสลูก ที่ขยายมาจากคลาสแม่อีกที
.
สำหรับหลักการข้อ 3 นี้ คลาสลูกจะสามารถเสียบแทนที่คลาสแม่ได้
โดยจะไม่ไปแก้ไขหน้าที่ (functionality) ของโค้ดหลักทั้งหมด
:
👉 4) Interface segregation principle
การออกแบบ interface ที่ดี ควรมีเมธอดที่จำเป็นเท่านั้น
คลาสลูกที่มา implement ไม่ควรได้เมธอดที่ไม่จำเป็นเกินมา
.
กล่าวอีกนัยหนึ่งการออกแบบ interface ที่ดี
ไม่ควรให้ interface มันทำงานครอบจักราล
ไม่ต้องใจดี เผื่อเมธอดเกินมา
ให้มีพอเพียง พอดีกับคลาสลูกก็พอนะครัช
:
👉 5) Dependency Inversion principle
หลักการนี้จะกล่าวถึง
- High level classess (อาจมองว่าเป็นมอดูลที่มีแต่ business logic ที่ซับซ้อนก็ได้)
- กับ Low Level Classes (อาจมองว่าเป็นมอดูลที่มีแต่ logic พื้นฐาน ทำงานระดับล่างๆ)
.
ซึ่ง class ทั้งสองระดับดังกล่าว
เวลาจะติดต่อกัน ก็ให้ทำผ่านทาง Abstraction Layer เท่านั้น
ไม่ควรติดต่อกันตรงๆ โต้งๆ
.
Abstraction Layer ก็คิดง่ายๆ
มันก็คือ Interface หรือ abstraction class นั่นแหละ
คือมีแต่รายละเอียดให้รู้เฉยๆ ยังไม่มีส่วน implements
เพราะเดียวจะมีคลาสมา implements แล้วมา plugin เสียบเข้าภายหลัง
.
..เขียนเป็นภาพก็ประมาณเนี่ย
High Level Classes --> Abstraction Layer --> Low Level Classes
:
++++++++
สำหรับคอนเซปต์ SOLID อาจยากต่อการเข้าใจนิดหนึ่งนะ
มันต้องเห็นโค้ดตัวอย่างด้วย
ยิ่งถ้าใครไม่เชียวชาญการเขียนโปรแกรมเชิงวัตถุ (Object Oriented programming)
หรือไม่ได้ลงมือเขียนจริงๆ จังเท่าไร
ก็อาจสงสัยมีมันทำไม?
.
แต่ทว่าการเขียนโปรแกรมเชิงวัตถุ ถ้าออกแบบไม่ดีนี้ ....บอกตรงๆ
..โค้ดจะเละ เทอะทะ ใหญ่โต
..อ่านโค้ดก็ยาก ย๊าก คลาสเยอะแยะมากมาย
.
ยังไงอ่านเพิ่มเติม ดูโค้ดตัวอย่างที่ออกแบบตามหลัก SOLID
ตามลิงค์นี้เขียนดี
https://www.oodesign.com/design-principles.html
https://scotch.io/…/s-o-l-i-d-the-first-five-principles-of-…
.
😘 โชคดีทุกท่านครับ ไปแหละ
เขียนโดยโปรแกรมเมอร์ไทย thai programmer
open closed principle 在 Milton Goh Blog and Sermon Notes Facebook 的最佳貼文
Submitting to the Government is Faith not Fear
“LET EVERY person be loyally subject to the governing (civil) authorities. For there is no authority except from God [by His permission, His sanction], and those that exist do so by God's appointment. [Prov. 8:15.] Therefore he who resists and sets himself up against the authorities resists what God has appointed and arranged [in divine order]. And those who resist will bring down judgment upon themselves [receiving the penalty due them]. For civil authorities are not a terror to [people of] good conduct, but to [those of] bad behavior. Would you have no dread of him who is in authority? Then do what is right and you will receive his approval and commendation. For he is God's servant for your good. But if you do wrong, [you should dread him and] be afraid, for he does not bear and wear the sword for nothing. He is God's servant to execute His wrath (punishment, vengeance) on the wrongdoer. Therefore one must be subject, not only to avoid God's wrath and escape punishment, but also as a matter of principle and for the sake of conscience. For this same reason you pay taxes, for [the civil authorities] are official servants under God, devoting themselves to attending to this very service. Render to all men their dues. [Pay] taxes to whom taxes are due, revenue to whom revenue is due, respect to whom respect is due, and honor to whom honor is due.” (Romans 13:1-7 AMPC)
In this time of increased prevention and precautionary measures as prescribed by the government, make sure to follow these directives obediently.
If you’re supposed to stay home, stay home. If you’re supposed to practice social distancing, do so. Wash your hands thoroughly with soap and keep clean.
We submit to these governing bodies not because they are always right or perfect, but because they are allowed to exist by the higher authority that’s above them—God.
It’s not a good testimony to Jesus if you’re going out unnecessarily for fun, and not practicing proper hygiene.
Foolhardy recklessness will just give opportunities for the world to malign the name of Christ.
You might be thinking, “Why are you behaving like you’re so scared of the virus? We are protected in Christ and can go anywhere we want!”
Just because we are promised divine protection doesn’t mean we use that freedom at the expense of stumbling others through our selfish actions.
Sometimes we give up certain privileges so that we can walk in love and be a good testimony for Jesus.
I believe that this is why many local churches have temporarily closed their doors to gathering for services and worship.
It’s not because of fear, but obeying the government’s directives for Jesus’ sake.
Imagine if someone who went to the church service caught the virus. No one knows exactly how the person caught it, but the church would be implicated, giving it a bad name in front of all the unbelievers.
We don’t want to be seen by society as troublesome rebels who ignore the government’s directives and end up causing trouble.
Christians are supposed to be known for their love, excellent conduct and good works towards anyone in need.
We should be part of the solution and not the cause of the problem.
And like the passage above says, pay your taxes—now is tax filing season isn’t it?
Because of people paying their taxes, our governments can have the reserves to help their citizens in times of crisis, just like how our Singapore government is able to draw on its reserves to reinforce the local economy during this tough time. The help is greatly needed and appreciated.
If you do what is right, you won’t have to be afraid of being jailed, fined or caned. Just follow instructions and you will have the peace of mind and a clear conscience!
This is how the world will open their hearts to hearing the Gospel, and how Jesus is glorified!
The world is watching the church—not what we’re thinking, but what we’re doing. Let’s glorify Jesus. Stay safe, shalom!
If you agree then just say “Yes I will willingly submit to the governing authorities for my Lord Jesus’ sake!”
Feel led to send us a one-time love gift? You can do so here on our Ko-Fi page: http://ko-fi.com/Miltongohblog
Browse my ebooks in the online store: https://www.miltongoh.net/store/c2/milton-goh-blog-products
#Jesus #Faith
open closed principle 在 コバにゃんチャンネル Youtube 的最讚貼文
open closed principle 在 大象中醫 Youtube 的最佳解答
open closed principle 在 大象中醫 Youtube 的最佳解答
open closed principle 在 How to adhere to the open-closed principle in practice 的推薦與評價
I understand the intent of the open-closed principle. It's meant to reduce the risk of breaking something that already works while modifying it, by telling you ... ... <看更多>
open closed principle 在 Open/Closed principle query - Stack Overflow 的推薦與評價
... <看更多>
相關內容