Giter Site home page Giter Site logo

salarycalculator's People

Contributors

grofab95 avatar marcingolenia avatar

Watchers

 avatar  avatar  avatar  avatar

salarycalculator's Issues

Testy

Dodać brakujące testy i poprawić istniejące.

Parser.cs -> Desktop ma referencje do konsoli.

https://github.com/grofab95/KalkulatorWynagrodzen/blob/fa029b8ecbe073dc3313510478b95036250bbf24/SalaryCalculator.Dekstop/CalculatorMainWindow.cs#L30

  1. Parser jest z projektu Console. Przez to, że dodałeś referencję do niego, jak zrobisz builda to wypluje Ci w bin obie aplikacje. Parser.cs powinien zostać wyniesiony do innego projektu w tym wypadku - Np do ParsingUtilities. W projektach w pracy często znajdziesz takie nazwy jak "Common", "Utils", "Shared", "Tools" - to jest straszne. W ogóle nie wiesz czego można się spodziewać w takich projektach, dlatego warto być bardziej precyzyjnym.

Generowanie kontrolek

https://github.com/grofab95/KalkulatorWynagrodzen/blob/fa029b8ecbe073dc3313510478b95036250bbf24/SalaryCalculator.Dekstop/MonthConfigEditorV2Window.cs#L22

Niby spoko ale wiemy, że miesięcy nie ubędzie ani nie przybędzie, dlatego ogólnie jestem bardziej za pierwszą wersją, ale zostaw. Ta też jest ok ale można trochę lepiej.

Zmienne w klasie:

private readonly System.Drawing.Font _defaultMonthLabel = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 238);
private readonly Padding _defaultPadding = new Padding(0, 1, 0, 6);

Ciało metody:
...

        var monthsLabels = Enumerable
            .Range(1, 12)
            .Select(index => new Label
            {
                Text = _monthsWorkingHours[index].ToString(),
                Font = _defaultMonthLabel,
                Margin = _defaultPadding
            });
        foreach (var monthsLabel in monthsLabels)
        {
            flowLayoutPanel1.Controls.Add(monthsLabel);
        }

Myślę że tak jest czytelniej. Są dwie iteracje ale przy tej liczbie elementów to nie ma znaczenia, wcześniej było gorzej - przy każdej iteracji pętli tworzyłeś nowy obiekt Font i Padding chociaż jest taki sam dla każdej iteracji ;)

Usprawnienie

https://github.com/grofab95/KalkulatorWynagrodzen/blob/fa029b8ecbe073dc3313510478b95036250bbf24/SalaryCalculator.Dekstop/CalculatorMainWindow.cs#L30-L52

Dużo się tu dzieje, możemy trochę ulepszyć (iteracyjne ulepszanie to dobra praktyka inżynierska), Proponuję wprowadzenie w projekcie SalaryCalculator nowych klas, które będzą trzymadełkiem dla obliczeń i współczynników które posłużą do ich otrzymania. Np MonthSalaryReport. Będzie ona miała Property;

  • Factors Factors
  • Summary Summary

Powyżej są 2 nowe klasy. CalculationFactors z propertami:

  • WorkedMonth
  • HourlyFee
  • WorkedHours

CalculationSummary:

  • OverHoursAmount
  • OverHoursGrossINcome
  • OverHoursNetIncome
  • TotalGrossIncome
  • TotalNetIncome
    czyli wszystko to co przyjmuje report builder. Zgodnie z zasadami CleanCode (taka książka na później) dobra metoda oprócz dobrej nazwy i małego rozmiaru przyjmuje idealnie 0, 1 parametrów, czasami 2 są uzasadnione a 3 wymagają już wytłumaczenia. Więcej jest wręcz niedoposzczalna (to jest już coś co trzeba wyćwiczyć ale możesz mieć to z tyłu głowy, na razie zbytnio się nie przejmując).

Następnie Calculate_Button_Click można trochę rozdzielić. Ja bym to widział trochę tak

private void Calculate_Button_Click(object sender, EventArgs e) {
var factors = new Factors(
workedHours = Parser.ParseStringToDouble(WorkedHours_TextBox.Text_
...
);
var summary = CalculateSummary(factors);
var monthSalaryReport = new MonthSalaryReport(factors, summary);
var textReport = new SimpleTextReportBuilder(_monthsWorkingHours).BuildMonthlyReport(monthSalaryReport );
new CalculatorReportWindow(report).ShowDialog();
}

Jakoś tak - i będzie z 9 linijek w metodzie. Może uda Ci się coś usprawnić po drodze. Oczywiście będzie trzeba poprawić trochę apkę konsolową ;) Ale to powinny być proste zmiany - masz testy także możesz być pewien że nic nie zepsujesz po drodze (testy też będzie trzeba poprawić).

Złe nazwy projektów

KalkulatorWynagrodzen -> SalaryCalculator.Console
    Console.Tests -> SalaryCalculator.Console.Tests

po zmianie nazwy projektów upewni się, że wszędzie są dobre namespaces i sprawdź czy default namespace też się zmienił. W razie czego zmień ręcznie (znajdziesz na nacie - how to set project default namespace in visual studio)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.