เคยได้ทำการเขียนโปรแกรมที่ทำการซื้อขาย จัดการ หรือ ERP แล้วไม่เคย สะดุดใจเลยว่าราคาเป็นส่วนหนึ่งของ product
รูปร่างหน้าตาการ design เลยออกมาแบบนี้
---------------------------------
PRODUCT
---------------------------------
id
name
detail
color << optional
size << optional
width << optional
height << optional
barcode
type << type_id
buy_price
sale_price
create_datetime
create_by
update_datetime
update_by
---------------------------------
แต่พอคิดอีกที ราคามันแปรผันได้ตลอด ใครจะมานั่งเปลี่ยนให้เนี่ย
แล้วเกิดว่า ถ้าเปลี่ยนขึ้นมาจริง รายการเก่าจะเกิดปัญหาอะไรบ้างเนี่ย อีกมากมาย
ดั้งนั้นเราก็ต้องปล่อยไป เดี๋ยวมีใครโวยวายแล้วก็บอกว่า มีคนแก้ราคา จบข่าว
ไม่ใช่แระ -_-'
ดังนั้น เอาออกไปดีกว่า
---------------------------------
PRODUCT
---------------------------------
id
name
detail
color << optional
size << optional
width << optional
height << optional
barcode
type << type_id
create_datetime
create_by
update_datetime
update_by
---------------------------------
แล้วตอนขาย จะเอาราคาที่ใหนมาแปะ ในใบเสร็จหละ
เอ่อ น่านสิ ก็จำเอาแล้วกัน ^0^ นายนี่ความจำเป็นเลิศจริง ๆ
ก็ทำ table รองรับราคาสิ
---------------------------------
PRODUCT_PRICE
---------------------------------
id
product << product_id
price
currency << currency_id
create_datetime
create_by
expire_datetime
expire_by
---------------------------------
แค่นี้น่าจะพอ แล้วถ้าราคาเปลี่ยนก็เป็นการ insert record เพิ่ม ไม่ใช่ update
ตอนเรียกใช้ก็เรียกลำดับ ล่าสุดมาใช้งาน
- currency คือค่าสนุลเงิน
เพื่อใช้คำนวณเปรียบเทียบเมื่อมีการเปลี่ยนแปลงสกุลเงิน
- expire จะถูกเก็บข้อมูล กรณีมีข้อมูลใหม่เข้ามา หรือ ราคาใหม่เข้ามานั่งเอง
เพียงเท่านี้ก็สามารถเพิ่มเติม item เดิม ในใบรายการเดียวกัน
กรณีราคาเพิ่มในวันถัดไป และสามารถอ้างอิงย้อนหลังได้
ว่าราคาในแต่ละช่วงเป็นเท่าไร
วันพุธที่ 28 กรกฎาคม พ.ศ. 2553
วันอังคารที่ 27 กรกฎาคม พ.ศ. 2553
visual c# diff java
อ่าว ไหง ออกมา .net ได้เนี่ย แต่มิใช่ปัญหาเลยเมื่อมองลองดูเนื้อภาษากันจริง ๆ แล้วสำหรับคนที่เคยเขียน java จะบอกว่า
เขียนแทบจะเหมือนกัน และด้วย concept oop ที่แน่นมากทำให้ลักษณะ และคุณสมบัติ ของทั้ง สองภาษานี้ เหมือนกันเลย
แล้วที่ต่างกันอะ น่านสิ ลองดูเล่น ๆ กันดีกว่า
อย่างแรกเลยคงเป็น package หรือลำดับการเข้าถึง
java : เนื่องด้วยการเก็บ file ไว้ใน folder จริงทำให้มีการอ้างถึงตาม folder ที่อยู่
เช่น th >> co >> google >> code
vc# : ในส่วนของ vc# นั้นจะต่างกันเนื่องจากว่า เป็นแค่การอ้างถึงการเข้าถึงจริง ๆ
ไม่ได้มีการแยกที่อยู่ไว้อย่างไร และจะเป็นการห่อหุ้ม Code ที่ต้องการประกาศการเข้าถึง
concept get-set ในกรณี
java :
vc#:
จะเห็นได้ว่า ภาษา java ค่อนข้างจะเก็บ concept เดิมไว้ได้ดี
แต่ภาษา c# นี่ยัดกันเป็นรูปแบบแปลก ๆ ขึ้นมาเชียว -_-" เหมือนทำ Inner class เลย...
การ สืบทอดคุณสมบัติจาก class แม่ อันนี้ต่างกันนิดหน่อย
java :
vc# :
และ การรับ interface ที่แยกไม่ออกจริง ๆ พี่น้อง ^-^"
java :
vc# :
...
เขียนแทบจะเหมือนกัน และด้วย concept oop ที่แน่นมากทำให้ลักษณะ และคุณสมบัติ ของทั้ง สองภาษานี้ เหมือนกันเลย
แล้วที่ต่างกันอะ น่านสิ ลองดูเล่น ๆ กันดีกว่า
อย่างแรกเลยคงเป็น package หรือลำดับการเข้าถึง
java : เนื่องด้วยการเก็บ file ไว้ใน folder จริงทำให้มีการอ้างถึงตาม folder ที่อยู่
เช่น th >> co >> google >> code
package th.co.google.code // how to use import th.co.google.code.Clazz
vc# : ในส่วนของ vc# นั้นจะต่างกันเนื่องจากว่า เป็นแค่การอ้างถึงการเข้าถึงจริง ๆ
ไม่ได้มีการแยกที่อยู่ไว้อย่างไร และจะเป็นการห่อหุ้ม Code ที่ต้องการประกาศการเข้าถึง
namespace th.co.google.code{
// insert class hear
}
// or
namespace th{
namespace co{
namespace google{
namespace code{
// insert class hear
}
}
}
}
// how to use
using th.co.google.code.Clazz
concept get-set ในกรณี
java :
public class Clock{
private int hour;
public int getHour(){
return hour;
}
public void setHour(int value){
hour = value;
}
}
// how to use
Clock c = new Clock();
c.setHour(8);
System.out.println(c.getHour());
vc#:
public class Clock{
public int Hour {
get {
return hour;
}
set {
hour = value;
}
}
}
// how to use
Clock c = new Clock();
c.Hour = 8;
Console.WriteLine(c.Hour);
จะเห็นได้ว่า ภาษา java ค่อนข้างจะเก็บ concept เดิมไว้ได้ดี
แต่ภาษา c# นี่ยัดกันเป็นรูปแบบแปลก ๆ ขึ้นมาเชียว -_-" เหมือนทำ Inner class เลย...
การ สืบทอดคุณสมบัติจาก class แม่ อันนี้ต่างกันนิดหน่อย
java :
public class Parent{
public void print(){
System.out.println("== Parent ==");
}
}
public class Child extends Parent{
public void print(){
System.out.println("== Child ==");
}
public void printAll(){
this.print();
super.print();
}
}
// how to use
Child c = new Child();
c.printAll();
vc# :
public class Parent{
public void print(){
System.out.println("== Parent ==");
}
}
public class Child : Parent{
public void print(){
System.out.println("== Child ==");
}
public void printAll(){
this.print();
base.print();
}
}
// how to use
Child c = new Child();
c.printAll();
และ การรับ interface ที่แยกไม่ออกจริง ๆ พี่น้อง ^-^"
java :
public interface Interfazz{
public void printTest();
}
public class Clazz implements Interfazz {
public void printTest(){
System.out.println("Clazz from Interfazz");
}
}
vc# :
public interface Interfazz{
public void printTest();
}
public class Clazz : Interfazz {
public void printTest(){
Console.WriteLine("Clazz from Interfazz");
}
}
...
python solution for of for of for
อ่า หัวข้องง ๆ กันเลยทีเดียว
หลายคนคงเคยเจอกันแล้ว ที่ มีการวน loop ซ้อน loop ซ้อน loop
มันจะเป็นประมาณนี้ ให้นำแต่ละตัวมารวมกัน ใส่อีก list นึง
ผลลัพท์
['http://www.google.com',
'http://www.google.co.th',
'http://www.yahoo.com',
'http://www.yahoo.co.th',
'http://www.gmail.com',
'http://www.gmail.co.th',
'http://wap.google.com',
'http://wap.google.co.th',
'http://wap.yahoo.com',
'http://wap.yahoo.co.th',
'http://wap.gmail.com',
'http://wap.gmail.co.th']
แยก logic กับ business ออกจากกัน
หลายคนคงเคยเจอกันแล้ว ที่ มีการวน loop ซ้อน loop ซ้อน loop
มันจะเป็นประมาณนี้ ให้นำแต่ละตัวมารวมกัน ใส่อีก list นึง
l1 = ['www', 'wap']
l2 = ['google', 'yahoo', 'gmail']
l3 = ['com', 'co.th']
list = []
for i in l1:
for j in l2:
for k in l3:
list.append('http://%s.%s.%s' %(i, j, k))
print list
ผลลัพท์
['http://www.google.com',
'http://www.google.co.th',
'http://www.yahoo.com',
'http://www.yahoo.co.th',
'http://www.gmail.com',
'http://www.gmail.co.th',
'http://wap.google.com',
'http://wap.google.co.th',
'http://wap.yahoo.com',
'http://wap.yahoo.co.th',
'http://wap.gmail.com',
'http://wap.gmail.co.th']
แยก logic กับ business ออกจากกัน
l1 = ['www', 'wap']
l2 = ['google', 'yahoo', 'gmail']
l3 = ['com', 'co.th']
def for_list(lists):
for i in l1:
for j in l2:
for k in l3:
yield l1, l2, l3
lists = [l1, l2, l3]
list = ['http://%s.%s.%s' %(i, j, k) for i, j, k in for_list(lists)]
สมัครสมาชิก:
บทความ (Atom)