Jaki wzorzec projektowy wybrać do implementacji różnych języków?

Odpowiedz Nowy wątek
2019-09-04 15:12
0

Jaki wzorzec projektowy można wybrać do implementacji różnych języków?
Kraje mają różne watowania, niektóre kraje mają 0, nie widzi mi się pisać pełno ifów do tego. Jaki wzorzec najlepiej by się sprawdził w takiej sytuacji ? :)

co ma język do podatku VAT? Jak sam dla siebie POPRAWNIE opiszesz zachodzące fakty, być może dostrzeżesz wzorzec - AnyKtokolwiek 2019-09-04 15:35
Wydaje mi się, że OP nie ma na myśli języka a bardziej różne kraje z różnym vatem. - Terrored 2019-09-04 15:37
Nie ma różnicy czy chodzi o język czy o stawkę VAT. Robi się to tak samo. - kzkzg 2019-09-04 15:46
Oczywiście, że nie ma różnicy. Logika jest taka sama. I tak jak Patryk27 napisał można do tego wykorzystać słownik :) - Terrored 2019-09-04 15:48
@Terrored: Niech żyje tworzenie softwaru na podstawie domysłów - AnyKtokolwiek 2019-09-04 16:20

Pozostało 580 znaków

2019-09-04 15:44

Tablicę asocjacyjną.


Pozostało 580 znaków

2019-09-04 16:26
0

Myślałem o strategii

Pozostało 580 znaków

2019-09-04 16:36
0

możesz wykorzystać strategie przykład

 public enum Country
    {
        PL,
        EN
    }
    public abstract class Display
    {
        public abstract void CountryName();
    }
    public class Poland : Display
    {
        public override void CountryName()
        {
            Console.WriteLine("Poland");
        }
    }

    public class England : Display
    {
        public override void CountryName()
        {
            Console.WriteLine("England");
        }
    }

    public class Context
    {
        public Dictionary<Country, Display> dic;
        public Context()
        {
            dic = new Dictionary<Country, Display> {
                {Country.EN, new England() },
                {Country.PL, new Poland() }
            };
        }

        public void Show(Country country)
        {
            dic[country].CountryName();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Context context = new Context();
            context.Show(Country.EN);

            Console.ReadKey();
        }
    }

Lubię miodek :)
edytowany 1x, ostatnio: Kubuś Puchatek, 2019-09-04 16:42

Pozostało 580 znaków

2019-09-04 16:42
0

A ja (domyślam się he he) widzę tablicę asocjacyjną strategii

Pozostało 580 znaków

2019-09-04 17:20
0

Factory?
ITaxCalculator przy użyciu metody ComputeTax może obliczać podatek w jakiś przeróżny sposób.
https://gist.github.com/nicko[...]394c590b738fac4a92364a31e034e

Tego switchamożna zamienić na jakiś sprytniejszą fabrykę (np. właśnie tablicę asocjacyjną). - some_ONE 2019-09-04 20:20

Pozostało 580 znaków

2019-09-04 20:47
0

Information Expert
https://en.wikipedia.org/wiki/GRASP_(object-oriented_design)

edytowany 1x, ostatnio: lambdadziara, 2019-09-04 20:47

Pozostało 580 znaków

2019-09-04 21:00
1

Nie potrzebujesz żadnego wzorca aby uniknąć masy ifów. Od tego jest programowanie obiektowe, a konkretnie polimorfizm.


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
Ale żeby stworzyć obiekt konkretnego typu i uniknąć masy ifow to można powiedzieć, że jakiegoś wzorca potrzebuje. Bo sam polimorfizm nie wyeliminuje mu ifowania/switchowania po kodzie kraju. - some_ONE 2019-09-04 22:18
Potrzebuje słownika/mapy/tablicy asocjacyjnej. To nie wzorzec projektowy tylko podstawowa struktura danych. - somekind 2019-09-04 22:33
Jeśli chodzi tylko o obliczanie podatku VAT to pewnie tak, ale w ogólności można powiedzieć, że może wykorzystać strategię i fabrykę. - some_ONE 2019-09-04 23:14

Pozostało 580 znaków

2019-09-05 07:48
1

Broń Boże, żadnych wzorców projektowych w tym przypadku, kod powyżej pokazuje do czego to prowadzi. Dużo linii kodu o niczym żeby zaimplementować słownik (kto umie przewidzieć wydajność takiego rozwiązania? Użyty zostanie hash czy zwykły switch? A może działanie będzie określone w czasie kompilacji?). Co ewentualnie można rozważyć to ustalenie stawki w pliku konfiguracyjnym i/lub określać kraj na podstawie locale (choc to nie jest zachowanie zawsze właściwe).

Nie znam tego waszego c# więc po mojemu:

(let ((vat (make-hash-table)))
  (Setf (gethash 'pl vat) 0.22)
  (Defun vat (where) (gethash where vat)))

(Print (vat 'pl))

edytowany 8x, ostatnio: elwis, 2019-09-05 08:26

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0