Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,038

HOME > PHP > PHP Forum > เมื่อออกแบบเป็น OO ในส่วนของ transaction data และ logic จะนำไปใส่ในส่วนไหนครับ



 

เมื่อออกแบบเป็น OO ในส่วนของ transaction data และ logic จะนำไปใส่ในส่วนไหนครับ

 



Topic : 048863



โพสกระทู้ ( 61 )
บทความ ( 0 )



สถานะออฟไลน์




คือตอนนี้ผมออกแบบไว้ได้ 2 ส่วนแล้ว คือหน้า html กับหน้า model ซึ่ง model จะมีเฉพาะำพวก getter ,setter อย่างเดียว แล้วผมจะนำ transaction data(insert,update,delete) หรือ logic process ไปไว้ในส่วนไหน หรือไฟล์ไหนดีครับ หรือใครมีไอเดียอย่างไรบ้างครับ คือผมไม่เน้นเฟรมเวิร์คน่ะครับ ขอบคุณครับผม



Tag : PHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-09-16 13:49:48 By : siridatsukkana View : 1060 Reply : 5
 

 

No. 1



โพสกระทู้ ( 538 )
บทความ ( 3 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


ลักษณะประจำที่ผมใช้จะมีอยู่ 3 ส่วน แบบนี้ครับ

ส่วนหน้าตา (Interface)

ส่วนการทำงานตามเงื่อนไข (Business Rule, BR)

ส่วนการเชื่อมต่อฐานข้อมูล (Data Layer, DL)

โดยลักษณะความสัมพันธ์จะเป็นแบบนี้ครับ

Interface <-> BR <-> DL

เวลาติดตรงไหน ก็ไปแก้ตรงนั้น ส่วน DL นี่ก็พยายามใช้ SQL command ที่เป็น ANSI หน่อย เวลาเอาไปใ้ช้กับ project อื่นที่ database ต่างชนิดกันก็จะได้พร้อมใช้เลย ไม่ต้องแก้ไขมากครับ

พอจะได้แนวไม๊ครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-16 14:02:55 By : salapao_codeman
 


 

No. 2



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ให้ออกแบบ Data Layer ของแต่ล่ะ Function ไว้ครับ ตอนแก้ไขจะง่ายและสะดวกครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-16 14:24:43 By : webmaster
 

 

No. 3



โพสกระทู้ ( 61 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : salapao_codeman เมื่อวันที่ 2010-09-16 14:02:55
รายละเอียดของการตอบ ::
การทำงานตามเงื่อนไข (Business Rule, BR) นี่เป็นฟังชั่นไหมครับ แล้วถ้าเป็นฟังชั่นจะนำไปรวมกับ data layer เป็นคลาสเดียวกันเลยได้ไหมครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-16 14:53:09 By : siridatsukkana
 


 

No. 4



โพสกระทู้ ( 538 )
บทความ ( 3 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์


ตอบความคิดเห็นที่ : 3 เขียนโดย : siridatsukkana เมื่อวันที่ 2010-09-16 14:53:09
รายละเอียดของการตอบ ::
จะเอาไปรวมก็ได้ครับ แต่ลองดูตัวอย่างแบบนี้ก่อนนะครับ

ตัวอย่าง :: หน้าเพจ หรือ (form ของ Win App) สำหรับการจัดการ Member ของระบบที่เราเขียนขึ้นมา

อันดับแรกเลย สร้างคลาส CMember ขึ้นมาก่อน ก็จะเป็น class ที่เก็บรายละเอียดของสมาิชิก เช่น ID, วันเกิด, e-mail ...

ส่วน Interface ก็หน้าจะมีการทำงานคร่าวๆ ตามนี้
- การเพิ่มข้อมูล Member
- การแก้ไขข้อมูล Member
- การลบข้อมูล Member
- แสดงข้อมูล Member ทั้งหมด (เช่นออกมาเป็นตารางคร่าวๆ ID, ชื่อ-นามสกุล, กลุ่ม, e-mail)
- แสดงข้อมูล Member รายบุคคล (ข้อมูลทั้งหมดของแต่ละคน)
- จำนวนสมาชิกทั้งหมด
- จำนวนสมาขิกในกลุ่ม

ทีนี้เราก็มาสร้าง class ของ BR ซึ่งก็จะมี function ตามการทำงานข้างบน กรณีที่การทำงานไหนที่มีการ return ค่ามากกว่า 1 record ก็แล้วแต่เลยครับว่าจะ return กลับด้วยอะไร datareader, datatable, List<> ...

- public int AddMember(CMember memberInfo)
- public bool EditMember(CMember memberInfo)
- public bool DeleteMember(int memberID)
- public List<CMember> GetAllMembers()
- public CMember GetMemberInfo(int memberID)
- public int CountAllMembers()
- public int CountMembersInGroup(int groupID)

ใน class ส่วนของ BR นี่แหละ ที่จะเป็นการตรวจสอบข้อมูลต่างๆ ที่ user ใส่มา ก่อนที่จะเอาไปเข้าฐานข้อมูล เช่น ชื่อ-นามสกุล ซ้ำหรือเปล่า e-mail ซ้ำไม๊ ค่าที่ควรจะเป็นตัวเลข ใส่เป็นตัวอักษรมาหรือเปล่า เป็นต้น ก็ถ้าไม่ผ่าน ก็ตอบกลับไปที่ interface ว่า error ได้เลย
หลังจากที่ผ่านแล้ว ก็จะไปเรียก function ใน class ส่วนของ DL อีกที เพื่อทำการบันทึกลงฐานข้อมูล

- public int DBAddMember(CMember memberInfo)
- public bool DBEditMember(CMember memberInfo)
- public bool DBDeleteMember(int memberID)
- public List<CMember> DBGetAllMembers()
- public CMember DBGetMemberInfo(int memberID)
- public int DBCountAllMembers()
- public int DBCountMembersInGroup(int groupID)

ในส่วนของ DL class นี้จะไม่มีการตรวจสอบใดๆ อีก จะมีแต่เรื่องของการเชื่อมต่อฐานข้อมูล และ sql command เท่านั้นเลย เพราะเราได้ทำการตรวจสอบมาแล้วใน class ของ BR

วิธีอย่างที่ยกตัวอย่างมานี้ อาจจะยากในตอนเริ่มแรก แต่ว่าจะป้องกันและทำให้เราสบายในหลายๆ เรื่องภายหลังได้ครับ

- ไม่มั่วตัวเอง ถ้าจับส่วนตรวจสอบเงื่อนไข ก่อน insert ข้อมูลไว้ที่ function เดียวกัน เวลาแก้ไข อาจจะมีโดนกันบ้าง(ตัวแปร) ซึ่งอาจจะทำให้ error ได้ และก็จะเกิดอาการงงตามมา

- class ในส่วนของ DL สามารถนำไปใช้ต่อ ที่ project อื่นๆได้เลย (ก็จะมีแก้ไขแค่เรื่องการเชื่อมต่อ และชื่อ column ของ table และก็ชื่อ table แค่ันั้น) ตรงตามหลัก OOP ซึ่งถ้ารวมกันแบบที่คุณอยากทำ เวลาเอาไปใช้ที่อื่น ก็ต้องไปลบในส่วนตรวจสอบออกก่อน เพราะแต่ละ project ส่วนตรวจสอบก็จะไม่เหมือนกันอยู่แล้ว ก็จะยุ่งยากอีก ดีไม่ดีอาจมีเขียนใหม่ = ='

- class ในส่วนชอง DL จะไม่มีผลกระทบใดๆ มากนักแม้ว่าเอาไปใช้กับ project ใหม่ที่ database เป็นคนละชนิดกัน ทั้งนี้ก็จะเป็นการบังคับไปในตัวเลยว่า sql command ที่คุณต้องใช้นั้นจะต้องเป็น standard ที่ใช้ได้ กับทุกๆ database เวลาเปลี่ยนก็จะไม่มีผลกระทบใดๆ
และถึงแม้ว่าคุณจะใช้ คำสั่ง, function เฉพาะที่มีอยู่ใน database นั้นๆ ก็มีผลกระทบน้อยอยู่ดี เพียงแค่คุณทำเอกสารกำกับไว้ให้ตัวคุณเองรู้ว่า function นี้ใช้ได้เฉพาะกับฐานข้อมูลชนิดนี้เท่านั้น ก็เป็นอันจบ เวลาเปลี่ยนคุณก็แค่หาคำสั่งใหม่ หรือใกล้เคียงมาใช้แทน เช่น

MS SQL query command
select top 10 * from table order by date_time;

Oracle query command
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
columns
FROM tablename
)
WHERE rownumber <= 10

เป็นต้น ลองศึกษาเพิ่มได้ตาม link นี้ ==> SQL Command comparation

ลองพิจารณาดูครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-16 18:23:32 By : salapao_codeman
 


 

No. 5



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

Logic, คำสั่งกับฐานข้อมูล ผมคิดว่าเอาไปไว้ใน controller หมดครับ ^^ ถึงจะดี
แต่ส่วนตัวเคยเอาไปไว้ใน model รู้สึกว่าเหนื่อจะต้องตั้งชื่อเมธอด (เสียเวลาคิดชื่อ)



ถ้าใช้ ORM ก็สบายหน่อยเอาไว้ใน Controller ได้เลย (ยังไม่เคยใช้)

แต่ส่วนตัวหลังจากที่เคยใช้ MVC แล้วจะย้ายอยู่ใน Controller หมด เลยครับ ยกเว้น โมเดลที่ไม่เกี่ยวกับการทำงานกับฐานข้อมูล


ประวัติการแก้ไข
2010-09-16 18:54:57
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-09-16 18:49:47 By : pjgunner.com
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : เมื่อออกแบบเป็น OO ในส่วนของ transaction data และ logic จะนำไปใส่ในส่วนไหนครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 03
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2025 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่