Template method vs partial method
TIL
720
C#
25
design pattern
23
White

Thành Phan viết ngày 16/07/2018

Story

Nay ngồi đọc cái partial method trong C# thấy 2 cái này có gì đó giống nhau, có thể thay thế nhau

Partial method

Đại khái là khi định nghĩa partial class thì mình có thể định nghĩa signature của method đó và implement sẽ được định nghĩa ở class khác.

Demo.cs

public partial class Something
    {
        // Partial method defind
        partial void Foo();

        // Normal function
        public void DoSomething()
        {
            Foo();
        }
    }

Demo2.cs

public partial class Something
    {
        // Partial method implement
        partial void Foo()
        {
            Console.WriteLine("This is Partial Method");
        }
    }

Tempate method

Như cái tên, template định nghĩa 1 mẫu(template) các bước để thực hiện một công việc nào đó. VD mình muốn có 2 file dữ liệu có dạng xml và json giờ mình muốn đưa dữ liệu trong 2 file đó vào database. Mặc dù 2 file có định dạng khác nhau nhưng mình có thể hình như quá trình insert vô DB có 1 số bước chung(đọc dữ liệu từ file, insert vô db). Đây chính là lúc template method phát huy tác dụng.

Abstract class định nghĩa cái "template";

public abstract class BaseImport
{
    public abstract void ReadDataFromFile();
    public abstract void InsertToDatabase();
    public abstract void ImportFile();
}

Các class con implement theo cái mẫu đó:

XML

public class ImportXmlFile : BaseImport
{

    public override void ReadDataFromFile()
    {
        Console.WriteLine("Read from file XML");
    }

    public override void InsertToDatabase()
    {
        Console.WriteLine("Insert to Database XML");
    }

    public override void ImportFile()
    {
        ReadDataFromFile();
        InsertToDatabase();
    }
}

JSON

public class ImportJsonFile : BaseImport
{
    public override void ReadDataFromFile()
    {
        Console.WriteLine("Read from file JSON");
    }

    public override void InsertToDatabase()
    {
        Console.WriteLine("Insert to Database JSON");
    }

    public override void ImportFile()
    {
        ReadDataFromFile();
        InsertToDatabase();
    }
}

Main

class Program
{
    static void Main(string[] args)
    {
        BaseImport importXml = new ImportXmlFile();
        BaseImport importJson = new ImportJsonFile();

        importXml.ImportFile();
        importJson.ImportFile();
    }
}

Output khi chạy chương trình trên:

Read from file XML
Insert to Database XML
Read from file JSON
Insert to Database JSON

ThanhPhan 17-07-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Thành Phan

4 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
1 0
Bài nãy sẽ được update thường xuyên Cần 1 email để nhận mail nhanh nhất có thể: https://www.mailinator.com Vừa coi video học frontend vừa code cù...
Thành Phan viết 1 năm trước
1 0
White
1 0
Concept Enity: Là object có kiểu là mutable . Object identity bằng key (key ở đây có thể là id hoặc GUID) ValueObject: Là object mà được identit...
Thành Phan viết hơn 1 năm trước
1 0
Bài viết liên quan
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 1 năm trước
0 4
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
4 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!