Giter Club home page Giter Club logo

parcelparser's Introduction

Parcel app

ParcelApp MainWindowParcelApp MainWindow

This application offers a GUI for parsing an xml file containing parcels and filtering the parcels by the department. The parcels shown are grouped by recipient, under the assumption that sending more deliveries is more expensive than insuring a delivery composed of aggregated parcels. Other types of grouping (or no grouping) can easily be achieved, as described below.

Architectural choices

C# was used because it is simpler to develop a GUI application, parsing an XML file and build queries on collections using LINQ.

The application is implemented in the src directory, following the Models-View-ViewModel (MVVM) pattern:

  • View (src/Views): contains MainWindow.xaml, implementing the main window layout.
  • ViewModel (src/ViewModels): contains the data exposed to the View, and retrieved from the Model. The src/ViewModels/tools directory contains a utility class implementing the ICommand interface, required for wrapping the ReadParcels method.
  • Model (src/Models): contains the logic for loading a file, parsing it, and applying department filters.

To promote extensibility, each filter implements a common interface (IFilter), composed of the GetDeliveries method. By doing so, new department filters can easily be added without modifying existing ones.

Filters can also be composed, using the decorator pattern. An example is FilterByWeightGrouping, which decorates FilterGrouping. FilterByWeightGrouping uses FilterGrouping to group the parcels by receipient first. Parcels are then filtered by weight ranges, as requested by the requirements. The same decorator pattern is also used for FilterByLargerValuesGrouping.

Unit tests are implemented in a separate project under the test folder. Due to the limited scope of the assignment, only the Model filters are unit tested.

Software dependencies

  • Visual Studio 2019
  • NUnit
  • .NET Framework

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.