Spring framework ตัวนี้ สุดๆ เลยครับ ทำให้เราเขียนโปรแกรมแบบ OO concept จริงๆ แต่ไปๆมาๆดันเหมือนเขียนโปรแกรมกับ config ซึ่งถ้าเขียนบน java มันมี spring bean editor เป็น plug in บน eclipse ทำให้เขียน config ง่ายหน่อย แต่ถ้าบน .net นี่ตอนนี้ยังเหนื่อยอยู่ คงต้องรอซักพัก
Concept ของ spring มีด้วยกัน 3 ส่วนครับคือ
- IoC ( inversion of control เน้นไปทาง DI ( dependency injection) spring ยิง object เข้ามาให้ )
- AOP ( Aspect Oriented Programming ทำให้เรา maintain โปรแกรมได้ง่ายขึ้น แต่ทำจริงก็ใช่ว่าจะง่าย ส่วนมากเอาไปใช้ ในงาน เกี่ยวกับ transaction , logging )
- Abstract base class ต่างๆ ทำให้ เขียนเพิ่มเติม ต่อยอด intregateระบบ ได้ง่ายขึ้น เช่น ในส่วนของ Data Access Layer คุณอาจจะใช้ NHibernate, ADO.NET หรือ iBatis.NET ก็แล้วแต่ คุณก็เอามา plug เข้ากับ bussiness layer โดยที่ตัว client ของคุณ ไม่จำเป็นต้องเปลี่ยนแปลง code เลย
ตัวอย่าง นะครับ
IoC :
class Sorter {
private ICollection collection;
private ISortAlgo sortAlgo;
public ISortAlgo SortAlgo {
get { return this.sortAlgo; }
set { this.sortAlgo = value; }
}
public ICollection Collection {
get { return this.collection; }
set { this.collection = value; }
}
public void sorting() {
this.sortAlgo.sort(this.collection);
}
}
interface ISortAlgo {
void sort(ICollection collection);
}
class BubbleSortAlgo : ISortAlgo {
public void sort(ICollection collection) {
// to do : implement bubble sort algo
}
}
class InsertionSortAlgo : ISortAlgo {
public void sort(ICollection collection) {
// to do : implement insertion sort algo
}
}
spring config
เรียกใช้งาน
public class Program {
public static void Main() {
Sorter sorter = getSpringContext().getObject("sorter") as Sorter;
sorter.Collection = getSampleCollection();
sorter.sorting();
display(sorter.Collection);
}
}
ประเด็นจะอยู่ตรง Class Sorter ครับ ถ้าเราเขียนแบบเดิม เวลาเราจะเปลี่ยน Sorting Algo เราต้องเขียนประมาณว่า
ISortAlgo sortAlgo = new BubbleSortAlgo();
หรือ
ISortAlgo sortAlgo = new InsertionSortAlgo();
ซึ่งจะทำให้เราต้องไปผูกกับ class ที่ implement interface ISortAlgo ไม่ตัวใดตัวหนึ่ง และ การเปลี่ยนอาจต้งอ compile program ใหม่ แต่ถ้าเราใช้ spring เราเพียงแค่ config ว่าจะยิง Sorting Algo ตัวไหนเข้าไป ( ตรง spring config น่ะครับ ) เปลี่ยน
ไม่มีความคิดเห็น:
แสดงความคิดเห็น