แสดงบทความที่มีป้ายกำกับ Develop แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Develop แสดงบทความทั้งหมด

วันอังคารที่ 15 กรกฎาคม พ.ศ. 2557

CultureInfo ปัญหาหยุมหยิมที่น่าปวดหัว ในการ Dev

สำหรับปัญหา Culture Info ที่เกิดขึ้นเป็นปัญหาหยุมหยิม สำหรับ Developer .net ที่มักจะมีปัญหา พ.ศ. บ้างคศ. บ้างประจำ และทำให้เกิดการ Error ในจุดที่ไม่ต้องการขึ้น Developer หลายๆ ท่านอาจจะไม่รู้ว่า เราสามารถทำการตั้งค่่าใน WebConfig หรือ App.Config ได้โดยมีสคริปดังนี้
<globalization uiCulture="es" culture="es-MX" />
หรือ 
<configuration>
   <system.web>
      <globalization
           fileEncoding="utf-8"
           requestEncoding="utf-8"
           responseEncoding="utf-8"
           culture="en-US"
           uiCulture="de-DE"
        />
   </system.web>
</configuration>

เปลี่ยน en-Us หรือ de-DE หรือ es,ex-MX เป็นตามที่ต้องการ ซึ่งปกตกิผมจะใช้เป็น en-US นะครับง่ายดี 

วันพฤหัสบดีที่ 10 กรกฎาคม พ.ศ. 2557

จงเขียนโปรแกรมทอนเงิน

ผมไปหาวิธีเขียนมาครับ เผอิญอยู่ๆอยากเขียน Copy ได้ครับ
 decimal[] ary_dec = new decimal[] { 100, 50, 10,5,1 };//แบงค์
            List<string> listof_doing = new List<string>();
            decimal dec_moneyvalue = 253;//จำนวนเงินรับ
            for (int int_i = 0; int_i < ary_dec.Length; int_i++)          
            {
                var dec_money = ary_dec[int_i];
                decimal dec_res1 = dec_moneyvalue / dec_money;
                decimal mod1 = dec_moneyvalue % dec_money;
                string ary_str_doing ="";

                if (mod1 > 0)
                {
                    int int_i2 = (int_i + 1);
                    ary_str_doing = ary_dec[int_i] + " Bath Uses " + Math.Floor(dec_res1) + " Piece";
                    while (int_i2 <= ary_dec.Length - 1)
                    {
                        dec_money = ary_dec[int_i2];
                        dec_res1 = mod1 / dec_money;

                        mod1 = mod1 % dec_money;
                        if (dec_res1 <= 0)
                        {
                            break;
                        }
                        if (Math.Floor(dec_res1) != 0)
                        {
                            ary_str_doing += "," + ary_dec[int_i2] + " Bath Uses " + Math.Floor(dec_res1) + " Piece";
                        }                      
                        int_i2++;
                    }
                    listof_doing.Add(ary_str_doing);
                    Console.WriteLine(ary_str_doing+"\n");
                }
                else
                {
                    ary_str_doing = ary_dec[int_i] + "Bath Uses " + Math.Floor(dec_res1) + " Piece\n";
                    listof_doing.Add(ary_str_doing);
                    Console.WriteLine(ary_str_doing);
                }
             
               
            }
            Console.ReadLine();
            //var result = listof_doing.ToList();

วันจันทร์ที่ 7 กรกฎาคม พ.ศ. 2557

ทำไมต้อง Developer ด้วย .net

วันนี้ผมได้ไปเจอ บทความ ทำไมถึงย้ายออก จาก .net(Why I Left the. NET Framework) จาก http://blog.jonathanoliver.com/why-i-left-dot-net/  ถ้าอ่านจากบทความนี้มันคือใช่เลยของข้อเสียของ .net นะครับ แต่ผมมีข้อให้คิดและแจกแจงให้สำหรับคนที่คิดจะย้ายจาก .net ไปอย่างอื่นนะครับ

ข้อดี
1) Opensource มีความก้าวหน้ารวดเร็วของเทคโนโลยี Framework มีหลากหลายให้หยิบใช้
2) Opensource มีการลงทุนต่ำและหาคนใช้งานเป็นได้มากมาย
3) มี Developer จำนวนมากกว่า
4)  JAVA,PHP สามารถเข้าถึงการ Compile หรือ การ Build โค้ดได้ โดย Manual ทำให้ผู้ใช้เรียนรู้โครงสร้างการ Build โปรแกรมได้ทั้งหมด
5) Tools มีหลากหลาย เช่น Eclipse, Editplus,Notepad++
6) Server Cloud Opensource มีหลากหลายมาก ทั้ง Amazon ,Digital Ocean ในไทยก็เริ่มมีหลากหลายเช่น Chaiyo Host
7) Big Data มีการ Support แล้ว จากการใช้ Hadoop

ข้อเสีย
1) การ Maintenance ต้องอาศัยผู้ชำนาญ แต่ .net Visual Studio(VS) กับ Framework มันพร้อมอยู่แล้ว
2) ต้องเลือก Web Server แต่ .Net framework ใช้แต่ IIS
3) Tools แต่ละตัวไม่ดีเท่ากับ VS เพราะในแง่ Intelligence ที่เป็นตัวช่วยสำคัญในการพัฒนา
4) ผู้พัฒนามีจำนวนมาก แต่ผู้ชำนาญแท้จริง มีจำนวนน้อย ที่จะ Manage จัดการกับ Server ได้
5) การเปลี่ยนมือของ Developer เป็นปัญหาเสมอ  หากความชำนาญต่างกันจะยิ่งกลายเป็นปัญหา เพราะโค้ดคนเก่าๆ บางทีใช้คำสั่งแบบที่คนใหม่ๆไม่เข้าใจ
6) ไม่มี Linq to sql หรือ Lambda Expression และ Entity Freamework ที่เป็น Tools ในการจัดการ CRUD ที่ทำให้การพัฒนา ซอฟท์แวร์ติดต่อฐานข้อมูลเป็นเรื่องง่ายๆ
7) การย้ายระบบ (Migration) ยุ่งยากกว่าเพราะ Feature หลายๆอย่าง ต้องสร้างเองทั้งหมด

ข้อเสียของ .Net
1) ต้นทุนสูง ไมโครซอฟท์เก็บค่า่ License ค่อนข้างแพงมาก
2) ทุกอย่างถูกปิดด้วย .Net Framework ที่ออกแบบมาอย่างดี
3) กิน Resource มากจาก Visual Studio
4) Server หาในไทยยาก และแพง ที่ผมใช้อยู่จะเป็น Hosting Vinhost กับ Hosting Dynamo
5) Windows AZure แพงกว่า Server Opensource
6) มี Hadoop จัดการกับ Big Data
7) ยังไม่มี การ Support กับทาง NOSQL


ทั้งหมดนี้ผมแสดงให้เห็นถึงข้อดีข้อเสียที่ผมพบนะครับ แต่โดยส่วนตัวผมสนับสนุน .net อยู่แล้วเหตุผลเพราะว่า เวลาการพัฒนาและจัดการมันเร็วกว่า Opensource เยอะ และการเปลี่ยน Version ส่วนใหญ่ไม่กระทบมาก ปรับเปลี่ยนได้เร็วกว่า Opensource มากครับ

วันศุกร์ที่ 4 กรกฎาคม พ.ศ. 2557

Developer Tip #Paging With SQL

ใครๆก็จะมีปัญหาเกี่ยวกับการ Query จำนวนแถวมากๆ มักเป็นปัญหาเสมอๆเพราะข้อมูลมันเยอะถ้าแค่ 5-10 แถวมันยังไม่มากแต่ล่อไปสัก 10000 แถวชักเริ่มปัญหาเกิดขึ้น เวลา Query ทั้งหมด
วันนี้ผมไปเจอมาเกี่ยวกับการทำ Paging สำหรับ SQL Server 2008 และ 2012 ครับ
ลองไปดูกันนะครับ
--VIEWING THE PAGE "2" WITH 5 ROWS
DECLARE @PageNumber AS INT, @RowspPage AS INTSET @PageNumber = 2SET @RowspPage = 5
SELECT * FROM (             SELECT ROW_NUMBER() OVER(ORDER BY ID_EXAMPLE) AS NUMBER,                    ID_EXAMPLE, NM_EXAMPLE, DT_CREATE FROM TB_EXAMPLE               ) AS TBLWHERE NUMBER BETWEEN ((@PageNumber - 1) * @RowspPage + 1) AND (@PageNumber * @RowspPage)ORDER BY ID_EXAMPLE

Query ข้างต้นสำหรับ SQL Server ที่ไม่ใช่ 2012 นะครับ (แต่ 2012 ก็ใช้ได้นะครับ)
แต่สำหรับเวอร์ชั่น 2012 จะมีเพิ่มขึ้นมาทำให้ง่ายขึ้นนิดหน่อยครับ
--CREATING A PAGING WITH OFFSET and FETCH clauses IN "SQL SERVER 2012"
DECLARE @PageNumber AS INT, @RowspPage AS INTSET @PageNumber = 2SET @RowspPage = 10 
SELECT ID_EXAMPLE, NM_EXAMPLE, DT_CREATEFROM TB_EXAMPLEORDER BY ID_EXAMPLEOFFSET ((@PageNumber - 1) * @RowspPage) ROWSFETCH NEXT @RowspPage ROWS ONLY;

สำหรับ Version 2012 ได้มี Offset เข้ามาทำให้การทำงานง่ายขึ้นอีกขั้นนึง และยังได้ประสิทธิภาพที่ดีกว่าการใช้ ROW_NUMBER อีกด้วย สามารถดูเพิ่มเติมได้ที่นี่ครับ
http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server.aspx

ขอบคุณ
http://social.technet.microsoft.com/wiki/contents/articles/23811.paging-a-query-with-sql-server.aspx
ครับ

วันพฤหัสบดีที่ 3 กรกฎาคม พ.ศ. 2557

Developer TIP ตอน Split ใน Store procedure

สำหรับการพัฒนาโปรแกรม ติดต่อฐานข้อมูล Store Procedure เป็นสิ่งที่ขาดไม่ได้ สิ่งหนึ่งที่ปัญหาง่ายๆ แต่เป็นปัญหาคือการทำ IN ใน Store Procedure ที่มักจะเกิดปัญหาว่า มันทำไม่ได้ตามต้องการ ทีนี้จะทำยังไง วิธีการนึงที่ผมใช้คือการสร้างฟังก์ชัน Split เข้ามาใน User - Define Function โดยมีโค้ดดังนี้
CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20) = ' ')
RETURNS @Strings TABLE
(   
  position int IDENTITY PRIMARY KEY,
  value varchar(8000)  
)
AS
BEGIN

DECLARE @index int
SET @index = -1

WHILE (LEN(@text) > 0)
  BEGIN 
    SET @index = CHARINDEX(@delimiter , @text) 
    IF (@index = 0) AND (LEN(@text) > 0) 
      BEGIN  
        INSERT INTO @Strings VALUES (@text)
          BREAK 
      END 
    IF (@index > 1) 
      BEGIN  
        INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))  
        SET @text = RIGHT(@text, (LEN(@text) - @index)) 
      END 
    ELSE
      SET @text = RIGHT(@text, (LEN(@text) - @index))
    END
  RETURN
END

โค้ดข้างต้นคือการสร้าง function สำหรับ Split ค่า String เพื่อให้สามารถใช้ใน IN Operation ในการ Query สำหรับ Stored Procedure ได้ 
การใช้งานกก็คือนำไปใส่ใน IN เท่านั้น ตัวอย่าง

CREATE PROCEDURE [dbo].[sp_TRANS]
@p_DateStart AS datetime,
@p_DateFinish As datetime,
@p_clstype as varchar(255)
AS
BEGIN
SELECT 
item_name,
transaction_date

 
FROM tb_buy_item

WHERE transaction_date BETWEEN @p_DateStart and @p_DateFinish
AND item_type IN (select value from fn_Split(@p_clstype, ',')) 
ORDER BY T.TRANS_ID ASC



END

หวังว่าจะเป็นประโยชน์กับ Developer ทุกท่านครับ 

วันศุกร์ที่ 27 มิถุนายน พ.ศ. 2557

Asp.net MVC ตอน 3 DataTable & Linq

Linq คืออะไร?
สำหรับการพัฒนาด้วย .net Framework แต่เดิมมีการติดต่อฐานข้อมูล ด้วย ADO.net โดยการใช้ Dataset กับ DataTable ซึ่งใช้ตั้งแต่ .net Framework 2.0 (หรือก่อนหน้านั้น) มาจนถึงปัจจุบัน .Net framework 4.5
และการติดต่อฐานข้อมูลรุ่นใหม่ที่มีการเริ่มใช้ตั้งแต่ .net framework 3.5 Sp1 นั่นก็คือ Entity Framework แต่ว่า ภายใน Entity Framework นั้นจะมี รูปแบบการเขียน Query ที่แตกต่างจาก ภาษา SQL ทั่วไป โดยภาษาที่เขียนนั้น เรียกว่า "LINQ to sql"  ผมจะขออธิบายตั้งแต่การเขียนแบบ ติดต่อแบบ DataTable นะครับ

การเขียน แบบ DataSet นั้นมีรูปแบบการเขียน ติดต่อกับฐานข้อมูลคร่าวๆ ดังนี้

string str_query = "SELECT * FROM PRODUCT";
            string str_conn = "SERVER=(LOCAL);user=sa;password=xxxx";
            SqlConnection sqlcon = new SqlConnection(str_conn);
            SqlDataAdapter adap = new SqlDataAdapter(str_query, sqlcon);
            DataTable dt_item = new DataTable();
            adap.Fill(dt_item);

การเขียนโดยใช้ DataSet หรือ DataTable นั้นจะ Return กลับมาอยู่ในรูปแบบของ Table อิสระที่มี Row และ Column เป็น อิสระ การเรียกใช้นั้นมีหลายรูปแบบ เช่น
Datagrid1.DataSource= dt;
string str_pid= dt.Rows[0]["Pd_id"].ToString();
เป็นต้น
จากรูปแบบข้างต้นจะสังเกตว่า DataTable นั้นจะมีคีย์สองตัวัน่นคือ Row และ Column ซึ่ง Column นั้นถ้าจะให้แม่นจำเป็นจะต้องใช้ในรูปแบบของ String Key ซึ่งนี่เองที่เป็นหนึ่งในจุดอ่อนและจุดยุุ่งยากทำให้โปรแกรมเมอร์ .net มักจะผิดพลาดกันได้เยอะมาก และยิ่งเป็น Case Sensitive ด้วยแล้วยิ่งไปกันใหญ่
แต่ว่าจุดอ่อนนี้ได้ถูกแก้ไข แล้วด้วย LINQ นั่นเอง
Linq เป็น ภาษารูปแบบหนึ่งที่ ไมโครซอฟท์สร้างขึ้นมา เพื่ออำนวยความสะดวกให้กับโปรแกรมเมอร์ทุกคน สามารถ Implement ติดต่อ Query ได้ง่ายขึ้น ทำให้แยกส่วน ระหว่าง Syntax ของการ Query กับ Object ลงอย่างสิ้นเชิง
ตัวอย่าง เช่น
SQL Query = "SELECT * FROM products";

LINQ =(from c in db.products).ToList();//

ตัวอย่างข้างต้นคือรูปแบบการ Select * from [tables] ที่แตกต่างจากรูปแบบทั่วไป โดย LINQ จะอยู่ในรูปแบบของ Object<IQueryable> ที่สามารถนำไปใช้ได้อย่างง่ายดายตัวอย่างการเขียนแบบ เต็มของ LINQ
using (var c = new Models())
            {
                var items= c.tb_products.ToList();
            }
 (ต้องมีการ using System.Linq; ด้วย)
การใช้ .ToList() จะทำให้ผลล้ัพธ์ที่ได้อยู่ในรูปแบบของ List<T>(); T= Object ต่างๆ เช่น Product เป็นต้น
การใช้ Linq ผลลัพธ์นั้นจะออกมาในรูปแบบของ List ที่เป็น Object ข้อดีนั้นคือความง่ายของการเป็น Object จะลดความผิดพลาดของการผิด Syntax ลง เช่น  var pd = product[0].pd_id; เป็นต้น
การเขียนนั้นพออยู่ในรูปแบบของ object ทำให้การอ้างอิงถึง Field หรือ Property ทำได้ง่ายขึ้น ลดความผิดพลาดของการอ้างอิงลง และทำให้การพัฒนามีความเร็วมากขึ้น

การเขียนรูปแบบสองอย่างระหว่าง DataTable และ Linq นั้นมีข้อดีข้อเสียต่างกัน ขอแสดงให้ดูดังนี้
ข้อเสียของ Linq to sql
1) หากไม่เคยเรียนรู้มา ต้องนั่งเรียนรู้ใหม่
2) การทำบางฟังก์ชั่น เช่น groupby มีความยุ่งยาก ในการเขียน
3) การ join สามารถทำได้ทั้ง left,right และ inner join แต่ทว่า syntax อาจจะทำให้ปวดหัวกันไปเลยเดียว ฉะนั้น หากใช้ควรเลี่ยงด้วยการไปทำเป็น Store หรือ View ในส่วนของ query แล้วดึงมาจะสะดวกและเร็วกว่าการนั่งเขียนพวกนี้เอง
4) มีความเร็วช้ากว่า DataTable  เพราะจำเป็นจะต้องแปลง Syntax เป็น SQL อีกที จึงจะ Query แล้วจึง Return มา ก็ต้องแปลงให้อยู่ในรูปแบบของ Object อีกครั้ง
5) ไม่ยืดหยุ่นเท่ากับ DataTable ข้อนี้  เป็นจุดเสียที่ เรียกว่า อยู่ในข้อดีเลยทีเดียวเพราะจุดเสียคือไม่ Dynamic เท่าไร ทำให้การเขียนต้องใช้ OpenSource นอกอย่าง AutoMapper เพื่อให้ทำงายง่ายหรือพัฒนาขึ้นมาเอง สำหรับการ Mapping Field

ข้อดีของ Linq to sql
1) หากเป็นแล้วทำให้การพัฒนาเร็วกกว่าการเขียนกับ Datatable
2) Syntax ของ Entity Framework มาจาก Microsoft ที่ใครที่เป็นก็สามารถต่อยอดและไล่ได้ง่าย
3) การทำ CRUD และ การใช้ StoreProcedure ง่าย
4) มีการ Provide Transaction ไว้ให้
5) เช็ค null, empty ได้ง่ายกว่า DataTable
6) สามารถ where หา ข้อมูลใน List ผลลัพธ์ได้ง่ายเพียงใช้ Syntax ของ Linq เช่น c.where(c=>c.id==1).FirstOrDefault(); แค่นี้ก็ได้มาแถวนึงแล้ว
7) Tool อ้างอิง EntityFramework ทำให้การจัดการแยกชัดเจนระหว่าง Database และ Code จึงง่ายต้องการ Management ระหวว่าง code กับ Databaseเช่น มีการเพิ่มคอลัมภ์ ใหม่เข้าไป หรือเปลี่ยนแปลง ชื่อฟิลด์ หากเป็น SQL Syntax จะปล่อยให้ผ่านไปเลยแต่หากเป็น EntityFramework จะ Error ฟ้องขึ้นมาทำให้ง่ายต่อการแก้ไข และจัดการ

ทีนี้มาถึง DataTable นะครับ
ข้อดี
1) ยืดหยุ่นสูง
2) ไม่ต้องใช้ Tools มากมาย ส่วนใหญ่จะมีคลาสกลางเป็น Connection และ Unity สำหรับจัดการก็เพียงพอแล้ว
3) มีความเร็วมากกว่า Linq

ข้อเสีย
1) Syntax เป็น String และ Case sensitive  ด้วยการที่ เป้น string ทำให้เวลาผิดพลาดเราก็ไม่รู้ต้องรอจนรันไปถึงจึงจะ Error ให้เห็น
2) มีปัญหากับ Null ในการเช็ค
3) String จำนวนหลายแห่งอาจจะทำให้การพิมพ์ตกหรือหล่นได้

คำสั่งพื้นฐานของ Linq to sql
Table : tb_items
SELECT * FROM tb_items : (from c in db.tb_items).ToList();
SELECT * FROM tb_items where pd_id=1 : (from c in db.tb_items where c.pd_id==1).ToList();
SELECT TOP 1 From tb_item :  (from c in db_items).FirstOrDefault();
SELECT TOP 10 From tb_item : (from c in db_items).Take(10).ToList();
SELECT Distinct * From tb_item : (from c in db_items).Distinct().ToList();
SELECT pd_id,pd_name FROM tb_item : (from c in db_items select c.pd_id,c.pd_name).ToList();


วันศุกร์ที่ 30 พฤษภาคม พ.ศ. 2557

ASP.NET MVC ตอน 2 Entity Framework และเครื่องมือ

สำหรับการพัฒนาเว็บไซต์ด้วย Asp.net MVC ได้มีการพัฒนากันมาตัั้งแต่ VISUAL STUDIO 2008 Service Pack 1 ตอนนั้นเครื่องมือยังไม่พร้อมมากมาย แต่ ณ ปัจจุบัน MVC ได้เดินทางมาถึง Visual Studio 2013 เรียบร้อยแล้ว  แล้วมันมีข้อแตกต่างจาก MVC2,3และ4 ยังไงล่ะ? คำถามนี้น่าสนใจมาก ก่อนอื่นขอแนะนำเครื่องมือสำคัญในการพัฒนากันก่อน

1) Visual Studio แนะนำควรใช้ตั้งแต่ Version 2010 ขึ้นไป เพราะอะไร? สาเหตุเพราะการเปลี่ยน Visual Studio แต่ละ Version จะมีปัญหาเกี่ยวกับ Solution เล็กน้อย และเวอร์ชั่นต่ำมักประสบปัญหาในการเปิดเข้าไปเวอร์ชั่นสูงกว่า นอกจากนี้ เวอร์ชั่นใหม่ๆ ยังมมี Tool ให้เพียบพร้อมกับว่า ยกตัวอย่างเช่น Visual Studio 2012 Update ล่าสุด ที่มี ฟังก์ชัน ASP.NET WEP API2  ที่มีการจัดการโค้ดและรูปแบบที่ดีกว่า WEP API 1 ลดความยุ่งยากและซับซ้อนลง ซึ่งจากที่เคยลองทำใน 2 เวอรชั่นโดยส้รางใน Visual Studio 2010 และ Visual Studio 2012 พบว่า Visual Studio 2012 มีการทำงานง่ายและจัดการได้ง่ายกว่า รวมทั้ง ASP.NET MVC4 นั้น ยังมีการผนวก JQuery และ Tools Routing ที่เร็วขึ้นกว่าเดิม  (แต่หากใครใช้ MVC4 แนะนำข้ามไป 2013 เลยครับเพราะ 2012 ยังไม่พร้อมกับ MVC4 ครับ)

Visual Studio 2008
Credit : http://blogs.msdn.com/blogfiles/jasonlan/WindowsLiveWriter/VisualStudio2008Beta2nowavailable_2D47/image.png

Visual Studio 2010

Credit : http://www.christiano.ch/wordpress/wp-content/uploads/2010/04/Logo_Visual_Studio_2010.jpg

Visual Studio 2012 
Credit :http://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-components-imagefileviewer/communityserver-blogs-components-weblogfiles-00-00-01-35-09/4784.VS2012-NEW-logo.PNG_2D00_550x0.png

Visual Studio 2013
Credit :http://agafonovslava.com/image.axd?picture=%2F2013%2F07%2FVisual+Studio+2013.png


2) Entity Framework  สำหรับ Entity Framework คือ Tools ในการจัดการ ORM(Oreited Relational Mapping) อธิบายง่ายๆว่ามันคือเครื่องมือในการจัดการ Query จากฐานข้อมูลให้อยู่ในรุปแบบของ Object ตามรูปแบบของภาษาต่างๆ เช่น C#, VB.net แทนเราโดยที่เรา ไม่จำเป็นต้องไปเรียนรู้คำสั่ง SQL ไม่ว่าจะเป็น Select, Insert, Update, Delete เลย แล้วทำไมต้องเป็น Entity Framework ทั้งที่มีตัวอื่นมากมาย?  คำตอบนี้ผมขอตอบดังนี้

  1. เพราะไมโครซอฟท์ซัพพอร์ตกับ Entity Framework ข้อนี้ชัดเจนครับ ผมเลือกเพราะว่าไมโครซอฟท์ซัพพอร์ต อาจจะเป็นคำตอบแบบกำปั้นทุบดิน แต่ขอบอกเลย เหตุผลคือมันไม่มีแพให้แน่นอน มันยังได้ไปต่อนั่นเอง
  2. Entity Framework เหมาะกับการทำงานแบบเป็นทีมในการพัฒนามากกว่า ทำให้การทำงานเป็นทีมในการ Maintenance Database เป็นเรื่องง่ายๆ สามารถจัดการได้ด้วยตัวคนเดียวและการเขียนโค้ดก็ลดน้อยลง จากประสบการณ์ผม ใช้แบบ Database -> Object และทำงานเป็นทีม หลายๆคน ผมพบว่า พอมี Tool เข้ามาช่วย ทำให้ Team Lead ทำงานได้ง่ายขึ้น น้องๆในทีมทักมา เราแก้ไขอย่างรวดเร็วในฐานข้อมูล จากนั้นบอกน้องๆ ให้ Update Entity Framework เพื่อแก้ไขปัญหาที่ การอัพเดตก็ง่ายนิดเดียวไม่ต้องพึ่งโค้ดแม้แต่น้อย ทำให้การทำงานเป็นหนึ่งเดียวได้ง่ายขึ้น จัดการปัญหาได้เร็ว กว่าการใช้ SQL ปกติ
  3. ลดปัญหา เกี่ยวกับ Syntax SQL Error ได้มากเช่น การจัดการกับ NullValue ที่เป็นปัญหาพื้นๆ แต่มักจะถูกละเลยได้ง่ายๆ
รูปภาพตัวอย่างการใช้ Entity Framework

แค่ 3 เหตุผลเบื้องต้นก็เพียงพอสำหรับการที่ผมจะเลือกมาใช้ในการทำงานแล้วครับ
ทีนี้ในการเขียน MVC จำเป็นจะต้องใช้แต่ Entity Framework หรือไม่? คำตอบคือไม่จำเป็นครับ Entity Framework เป็นแค่ Tool ตัวนึงครับ เราสามารถจัดการตัวอื่นได้ แต่ Solution ที่ผมใช้และง่ายจริงๆคือ การใช้ การพัฒนาด้วย ASP.NET + ENTITY FRAMEWORK + SVN (tortoise) ทำให้การพัฒนาซอฟท์แวร์ สำหรับ Develooper สะดวกขึ้น และแก้ปัญหาได้เร็วขึ้น ถึง 20% ครับ

วิธีการใช้ Entity Framework เบื้องต้น
1. เปิดโปรเจคที่ต้องการใช้
2. คลิ๊กขวาที่ Solution Explorer เลือก Add New Items เลือกที่เมนู Data จากนั้นเลือก ADO.NET Entity Framework Data Model  และทำการตั้งชื่อ จากนั้นกด Add
3. เมื่อเข้ามาแล้วจะเข้าสู่หน้าจอให้เลือก Content Model มีตัวเลือกสองแบบ (หากต้องการใช้ Database To Object) ให้เลือก Generate From DataBase และกด Next จะเข้าสู่ขั้นตอนต่อไป

4. ขั้นตอนต่อมาคือการเลือก Data Connection สำหรับขั้นตอนนี้คือการเลือกการติดต่อกับฐานข้อมูลว่าจะให้ Entity ติดต่อกับฐาน้ขอมูลอะไร ขั้นแรกถ้ายังไม่เคยมีให้เลือก New Connection และทำตามขั้นตอนไป แต่ถ้ามีแล้วให้เลือก Connection จาก ComboBox ครับ และจะมี Checkbox ให้ Save Connection เข้าสู่ Web.Config (App.config) ซึ่งตรงนี้ แล้วแต่จะกดนะครับ โดยส่วนตัวผมชอบแบบสร้างให้เพราะเราแก้ไขมันง่ายดี เมื่อเรียบร้อยกด Next จะเข้าสู่ขั้นตอนสุดท้ายสำหรับเลือก Table,View,Store Procedure
5. ขั้นตอนนี้คือขั้นตอสำหรับเลือกว่า จะติดต่อ Entity กับ Table หรือ View, Storeprocdure อะไรบ้าง

เมื่อทำครบทุกขั้นตอนแล้ว จะได้ไฟล์เข้ามาใหม่ ตามชื่อที่เราตั้งโดย จะนามสกุล edmx ทีนี้พอเราดับเบิ้ลคลิ๊กเข้าไปจะพบตารางเต็มไปหมด ขั้นตอนต่อจากนี้เราก็แค่หยิบมาใช้ซึ่งทุกอย่างจะอยู่ในรูปแบบของ Object หมดแล้วทั้งสิ้นเรามีหน้าที่ แค่หยิบไปใช้ สำหรับการ Insert,Update,Delete จะใช้ Syntax แบบ LINQ to sql ในการจัดการ CRUD หากใครไม่เเคยใช้ก็ข้อให้ไปศึกษาที่นี่ก่อนนะครับ

เพิ่มเติม : http://bithai.wordpress.com/2009/09/22/%E0%B8%97%E0%B8%B3%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81-linq-%E0%B8%95%E0%B8%AD%E0%B8%991/




วันพฤหัสบดีที่ 29 พฤษภาคม พ.ศ. 2557

ERP - ตอน 2 หัวใจสำคัญของ ERP

จากตอน 1 หลังจากที่มีการแนะนำ ERP กันไปแล้ว ต่อไปก็ถึงคราว เจาะลึกเข้าซะหน่อยเกี่ยวกับ หัวใจสำคัญของ ERP

สิ่งที่สำคัญของ ERP คืออะไร? หลายคนสงสัย ระบบบริหารทรัพยากรขององค์กร (ERP) นั้นตัวสำคัญคืออะไรกันแน่? หลายคนคงสงสัย ไม่ว่าจะเป็นระบบบุคคล บัญชี การผลิต การขาย หรือ ขนส่ง สิ่งเหล่านี้ก็สำคัญ แต่สิ่งที่สำคัญกว่านั้นคือ REAL-TIME  คำๆนี้คือหัวใจของ ERP อย่างแท้จริง จะเป็น ERP จะเป็นระบบที่เชื่อมโยงกันทุกระบบเข้าด้วยกันภายในองค์กร อย่างทันทีหรือทันท่วงที (REAL-TIME)  เพราะอะไร? นั่นเพราะผู้บริหาร จะต้องรู้ความเคลื่อนไหว โดยตลอดเพื่อให้แก้ไขสถานการณ์และปัญหาได้อย่างทันท่วงที  ระบบ ERP ที่ดีและมีประสิทธิภาพ วัดได้จากการตอบสนองต่อ ปัญหาและรับรู้ปัญหาได้อย่างเร็วขนาดไหน หากสิ่งนี้ขาดหายไป ERP จะเป็นแค่ระบบที่ไม่ได้ประสิทธิภาพอีกต่อไป ฉะนั้นการประมวลผลที่รวดเร็ว การเชื่อมโยงระบบต่างๆภายในเข้าด้วยกันและแสดงผลอย่างทันท่วงที จึงจะเรียกว่าระบบ ERP หากขาดสิ่งใดสิ่งหนึ่ง โดยเฉพาะอย่างยิ่ง REAL-Time จะทำให้ ERP ขาดประสิทธิภาพทันที

ทีนี้มีคำถาม แล้วระบบไหนสำคัญที่สุดที่จะทำให้รู้ว่าทันที คำตอบคือ ระบบบัญชีนั่นเอง ERP ที่ดีมีแกนกลางคือระบบบัญชีและการเงินเพราะการเงินจะเชื่อมโยงกับทุกอย่าง และบัญชีจะมีหัวใจสำคัญคือทันทีอยู่แล้ว ฉะนั้นผู้บริหารจะรับรู้ได้ทันที เมื่อมีการเคลื่อนไหวทางการเงิน หรือบัญชีที่เกิดขึ้น ฉะนั้นสิ่งแรกที่ต้องคำนึงถึงการทำระบบ ERP คือ ระบบบัญชีนั่นเอง หากปราศจาก ระบบบัญชี ย่อมไม่ใช่ ERP และระบบบัญชีนี้เองที่เป็นปัญหาของทุกองค์กร ที่จะใช้ระบบ ERP เลยและหลายบริษัทก็ไม่รับทำERP เพราะระบบบัญชีนี้เอง ทำไมเป็นงั้นล่ะ? เหตุผลง่ายๆเลยครับ บัญชีเนี่ยต้องอาศัยผู้เชียวชาญเฉพาะทางมาประสานงานด้วย การทำบัญชีก็ไม่ง่ายต้องมีขั้นตอนต่างๆมากมาย ซึ่งการจะให้ ERP จากระบบต่างๆมาปลั๊กเข้ากันเพื่อให้รายงานการเคลื่อนไหวอย่างทันทีก็ย่อมเป็นไปได้ยากมาก การทำระบบ ERP หลายๆที่จึงต้องติดต่อกับบริษัททำระบบบัญชีก่อนเลยเพื่อให้เป็นหัวใจในการเคลื่อนไหว แล้วจึงทำระบบอื่นๆตามมา แต่มันก็มีข้อดีครับเพราะระบบบัญชี หรือบัญชีงบต่างๆ ล้วนเป็นสิ่งที่ค้ลายๆกันในหลายบริษัท ต่างกันแค่ชื่องบ และประเภท แต่รายงานต่างๆ รูปแบบการลงบัญชีหรือ เดบิตเครดิต มันถูกจำกัดไว้ตั้งแต่แรกแล้ว จึงมีหนทางอยู่  แต่จะให้พนักงานบัญชีเก่งๆ มีประสบการณ์ให้ความร่วมมือนั้นก็ปัญหานึงแหละครับ

สรุป ERP ที่ดีจะต้องมีการรับรู้การเคลื่อนไหวอย่างทันที(REAL-TIME) เชื่อมต่อทุกระบบเข้าด้วยกัน และหัวใจสำคัญคือระบบบัญชี ที่คอยรายงานสภาพคล่องทางการเงินขององค์กรเพื่อให้แก้ปัญหาได้อย่างท่วงที

ระบบการทำงานแต่ละบริษัทไม่เหมือนกัน องค์กรแต่ละองค์กร ไม่จำเป็นจะต้องมีครบตั้งแต่การผลิตยันการขนส่ง แต่จะคงคอนเซ็บของ ระบบ ERP ไว้ได้ ควรจะต้องมีอย่างที่บอกครับคือรายงานอย่างทันีและการเชื่อมต่อระบบเข้าด้วยกัน ระบบบัญชีไม่จำเป็นต้องใหญ่ก็ได้ขึ้นอยู่กับขนาดขององค์กรแต่อย่างน้อยต้องรายงานสภาพคล่องและสถานะทางการเงินของอบริษัทเพื่อให้ผู้บริหารตัดสินใจได้

วันจันทร์ที่ 26 พฤษภาคม พ.ศ. 2557

ASP.NET MVC(C#) ตอน 1

ASP.NET MVC(C#)
ตอนที่ 1 รู้จัก MVC
MVC ย่อมาจาก Model – View – Controller 3 ตัวนี้ มีความหมายและหน้าที่ของมัน
Model คือ ส่วนสำหรับใช้ติดต่อฐานข้อมูล ส่วนใหญ่ Developer จะใช้เก็นคำสั่งพวกก Insert,Update,Delete, Select ลงใน Folder นี้โดยแยกเป็น Class สำหรับติดต่อฐานข้อมูลโดยเฉพาะและ Object ที่ใช้สำหรับ Insert สู่ ตารางต่างๆ โดยส่วนตัวตรงนี้ผมชอบผลักให้ไปกับ Entity Framework เพราะทำให้การ Manage ง่ายดี

View คือ ส่วนสำหรับหน้าจอแสดงผล ใน ASP.net MVC ที่ใช้ RAZOR จะเป็น .cshtml ใน Visual Studio จะไม่มีหน้า Design ให้เหมือนกับ Web Form

Controller คือส่วนของการเชื่อมเพื่อแสดงผลระหว่าง Model และ View โดยใน ASP.net MVC จะอยู่ใน Folder Controller และสามารถ Add Controller ได้เลย ภายใน Controller จะมี Action อยู่ภายใน แต่ละAction จะเชื่อมต่อกับ View 1 View
 อ่านเพิ่มเติมได้ ที่นี่

MVC คือ Pattern หนึ่งในการดีไซน์และพัฒนา Software โดยส่วนใหญ่จะเน้นการพัฒนาผ่านบนเว็บ MVC ไม่ได้ถูกจำกัดแค่อยู่บน .NET เท่านั้นแต่สามารถใช้ได้กับหลายภาษา เท่าที่ผมรู้ก็จะมี PHP ที่มี Framework MVC จำนวนมาก JAVA ก็ไม่น้อย และ.NET ที่มี .NET Framework คอย Provide ไว้ให้

ASP.net Web Form VS ASP.NET MVC
Topic
Web Form
MVC
โครงสร้าง Solution
มีแค่ Designer กับ C#
มี 3 แบบคือ Model, View, Controller
รูปแบบภาษา
ใช้ได้ทั้ง VB.net แล C#.net
ใช้ได้ทั้ง VB.net แล C#.net
การติดต่อฐานข้อมูล
ไม่จำกัด Tool ขึ้นอยู่กับ Tool ที่ใช้กับ .net ได้
ไม่จำกัด Tool ขึ้นอยู่กับ Tool ที่ใช้กับ .net ได้ แต่ว่าโดยส่วนใหญ่จะเก็บไว้ที่ Folder Model
Html Design
มีหน้า HTML Design ให้ใน Visual Studio
ไม่มีหน้า Designer สำหรับ HTMLให้
การ Include File
จะต้องสร้างเป็น user Control(.asmx) แล้วลากเข้ามาใส่ในดีไซน์
สามารถสร้างเป็น Shared หรือ Partial จากนั้น ใส่คำสั่งในการ Include เข้ามาได้ ตาม Syntax
ASP.NET CONTROL FORM
สามารถลากวางใช้ จากหน้า  Designer ได้เลย
สำหรับ MVC ไมโครซอฟฟท์ จัดให้หลายชุดคำสั่งมากและง่ายต่อการดึงมาใช้ แต่ต้องพิมพ์เอา
Javascript Ajax
เขียนปกติ
เขียนปกติ
Ajax Tookit
มีให้
ไม่มีให้
เวลาในการพัฒนาสำหรับเริ่มใหม่
Bad
Normal
เวลาในการพัฒนาสำหรับผู้เป็น .Net WebForm
Fast
Normal
หลาย Developer
Bad
Good
การวาง Pattern ในการพัฒนา
ยาก
ง่าย สาเหตุเพราะ มี Pattern พื้นฐานได้ส่วนนึง แค่ตั้งชื่อและติดต่อฐานข้อมูลให้พร้อม
RESTful Service
No
Yes
ViewState
Yes
No
ViewBag
No
Yes
Performance
Good
Normal
Server Support ในไทย
มีครบทั่วเพราะเป็นพื้นฐาน
ต้องสอบถามบางที่
Learning Curve
Normal
Good
Upgrade Version
Easy
Easy
นี่คือเปรียบเทียบเบื้องต้น จากประสบการณ์ในการพัฒนาโดยตรงและหาข้อมูลเพิ่มเติมครับ
สาเหตุที่ต้องพัฒนาด้วย MVC

  1.  ข้อได้เปรียบสำหรับเริ่มโปรเจคใหม่คือ Pattern ในการพัฒนาที่ชัดเจนกว่า Web Form กับการวาง Pattern แบบ Model, View, Controller เปรียบเสมือนการวาง ครบเป็น Module ที่ง่ายต่อการ จัดการพัฒนาหลายๆคนพร้อมกับ
  2.   ยืนหยุ่นกับ Developer มาก ทำให้การพัฒนาเร็ว และแม้จะไม่ชำนาญด้านการพัฒนาสำหรับ .Net ก็สามารถจัดการส่งต่อให้ผู้เชี่ยวชาญได้ง่าย
  3.  หากวาง Style ในการเขียนและตั้งชื่อตัวแปร แล้ว ผู้ต่อนั้นง่ายมาก
  4. เรียนรู้ง่ายและไว
  5. สามารถ Plug กับ Pattern อื่นได้ง่ายเช่น Repository, Invention of Control หรือ อื่นๆ
  6. เขียน RESTful Service ได้ดี ง่ายต่อการเขียนติดต่อกับ Cross Platform
สามารดูเพิ่มเติมได้ ที่นี่
ลิงค์เพิ่มเติมสำหรับ Asp.net MVC
http://sinosoi.wordpress.com/2011/07/14/asp-net-mvc-01-%E0%B8%A1%E0%B8%B1%E0%B8%99%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/

http://www.microsoft.com/thailand/msdn/ASPNET_MVC3_HTML5_Vol1.aspx