Skip to content

Instantly share code, notes, and snippets.

View chrisza4's full-sized avatar

Chakrit Likitkhajorn chrisza4

  • ThoughtWorks
  • Thailand
View GitHub Profile
public class Invoice {
private bool isForXDepartment; // ตัดทิ้งได้
private bool isForYDepartment; // ตัดทิ้งได้
private bool isCalculateVat;
private bool isCalculateSpecialTax;
private List<InvoiceItem> items;
public class InvoiceItem {
public int quantity;
public class InvoiceDepartmentY {
private bool isCalculateSpecialTax;
private List<InvoiceItem> items;
public class InvoiceItem {
public int quantity;
public string description;
public double pricePerUnit;
}
public class InvoiceNormal {
private bool isCalculateSpecialTax;
private List<InvoiceItem> items;
public class InvoiceItem {
public int quantity;
public string description;
public double pricePerUnit;
}
@chrisza4
chrisza4 / InvoiceDepartmentX.cs
Last active January 1, 2017 13:14
All 3 Class
public class InvoiceDepartmentX {
private List<InvoiceItem> items;
public class InvoiceItem {
public int quantity;
public string description;
public double pricePerUnit;
}
@chrisza4
chrisza4 / Invoice.cs
Last active January 1, 2017 07:47
Invoice with composition
public class Invoice {
private ISumpriceCalculator sumpriceCalculator;
private List<InvoiceItem> items;
public class InvoiceItem {
public int quantity;
public string description;
public double pricePerUnit;
}
public interface ISumpriceCalculator {
double calculateSumPrice(List<InvoiceItem> items);
double plusVat(double price);
}
public class DepartmentXSumpriceCalculator: ISumpriceCalculator {
public double calculateSumPrice(List<InvoiceItem> items) {
return items.sum(d => d.pricePerUnit);
}
var calculator = SumpriceCalculatorFactory.createSumpriceCalculator(Department.X, false);
var invoice = new Invoice(calculator);
public double calculateSumPrice () {
var price = 0.0;
price = calculateSumPrice(); // แต่ calculcateSumPrice อาจจะทำงานไม่เหมือนกันขึ้นอยู่กับว่า Inject อะไรเข้ามา
price = plusVat(price); // เช่นกัน plusVat เราก็ไม่อยากให้ทำงานเหมือนกัน
return price;
}
@chrisza4
chrisza4 / unwieldy.js
Last active January 29, 2017 15:27 — forked from dtinth/unwieldy.js
I think I need an IoC container…
const getPlayerRankingsRepositories = () => {
rankingEntryRepository,
tokenValidator,
...getPlayersUserRepositories()
}
const getPlayersUserRepositories = () => {
playerRepository,
legacyUserRepository
}
(ns todomvc.state
(:require [reagent.core :as r]
[cljs-uuid-utils.core :as uuid]))
(defonce todo-data (r/atom (array-map)))
(defn add [title]
(let [new-uuid (uuid/uuid-string (uuid/make-random-uuid))]
(swap! todo-data assoc new-uuid {:id new-uuid
:title title