about software programming techniques


JJ van Zon 2023

📜 Table of API’s

back

This article lists some of the tech used in the JJ projects.

Contents

Code

Visual Studio Programming environment used for the development of the software.
VS Code Used for MarkDown editing.
.NET Framework from Microsoft that forms the foundation of the software.
Mono Version of .NET that worked for other platforms than Windows. Later versions of .NET itself work on more platforms out-of-the-box.
Unity Game Engine The first tech at that time, that would cooperate for deploying the code on multiple mobile platforms. It used the Mono compiler.
C# Primary programming language.
Visual Basic Some projects might still use this programming language.
ReSharper Tool for code formatting, refactoring and code smells and such.
Git Source control, revision history, version management of the code.
GitHub Where the source code is hosted and shared.
Git for Windows Windows version of Git.
Git Extensions User interface for Git with many options.
TortoiseGit Git user interface that shows state in File Explorer.
Azure DevOps Build pipeline, Pre-Release-Package-Feed, original planning boards, may host a repository not migrated to GitHub.
GitHub Issues Gradually used more for planning.
MarkDown Lightweight alternative for HTML. Used for documentation. Compatible with various web tech.
JJ.Framework In-house programmed extensions to the .NET Framework.
GitHub / NuGet / JJs-Pre-Release-Package-Feed
JJ.Framework.Conversion Makes it easier to convert simple types.
JJ.Framework.Reflection Helps and speeds up accessing code structure elements through reflection and lambda expressions.
JJ.Framework.Canonical Types to share data between JJ projects. Small scale Canonical model for generic handling of Successful flags, Validation Messages and combinations of IDs and Names.

Data

SQL Server Primary data store technology for relational databases.
ORM Hides most SQL, exposing an object graph, to focus on the logic, instead of on the data storage.
SQL For performance reasons SQL is hand-programmed incidentally, combined with ORM.
NHibernate A type of ORM. Chosen in several JJ project because an employer also so happened to use it.
QueryOver A strongly-typed query language like LINQ, but then the NHibernate version.
FluentNHibernate A way to define ORM mappings with fluent notation.
Entity Framework A type of ORM. Chosen less in the JJ projects, because of more experience with NHibernate. Worth considering though.
LINQ A query language usable in C#. Can query several types of data store, but commonly used for in-memory collections.
JJ.Framework.Collections LINQ extensions from the JJ.Framework.
JJ.Framework.Data Helps hide data access behind abstractions. It does not expose whether it is SQL Server, SQL, ORM, NHibernate or Entity Framework. It would just offer abstracted convenient methods instead. For more information see documentation.
JJ.Framework.Data.EntityFramework Entity Framework extension to work with interfaces from JJ.Framework.Data.
JJ.Framework.Data.Memory Extension to the interfaces specified in JJ.Framework.Data that allow working with in-memory data for instance to mock a data store.
JJ.Framework.Data.NHibernate NHibernate extension to work with interfaces from JJ.Framework.Data.
JJ.Framework.Data.SqlClient Also know as SqlExecutor. Work more easily with SqlClient with less code.
JJ.Framework.Data.Xml An extension to JJ.Framework.Data for storing in XML files. System.Xml is used internally.
JJ.Framework.Data.Xml.Linq Additional feature for JJ.Framework.Data that stores data in XML files. System.Xml.Linq is used internally.

Logic

JJ.Framework.Business Types for supporting a business layer and/or API. Bidirectional relationship synchronization. Result types to pass data, succes flags and (validation) messages. ISideEffect: Used for some polymorphism between small pieces of business logic that go off as a result of data modification.
JJ.Framework.Validation A nice fluent notation for validations.
JJ.Framework.Mathematics Helpers for math things.

Presentation

General

PagerViewModelFactory Constructs a PagerViewModel with properties like CanGoToFirstPage, CanGoToPreviousPage, CanGoToNextPage, CanGoToLastPage.

Web

IIS Or Internet Information Services. For hosting web sites. Some Visual Studio projects like to use it upon load.
MVC Or Microsoft ASP.NET MVC Framework. Web development tech. Code runs mostly server side.
Razor A view renderer for web. Terse syntax, combining C# and HTML almost seamlessly.
JavaScript Used to support UI details in web. In this architecture most (UI) logic would be handled in C# instead.
TypeScript Might be preferred over JavaScript in the future.
AJAX For retrieving / posting back parts of pages to the server and back.
jQuery Used to support UI details in web. Can make some JavaScript shorter.
JJ.Framework.JavaScript Used to support UI details in web. Remembering scroll position, cookie functions, URL parsing. Might be extended with one-line AJAX functions one day.
JJ.Framework.Mvc Extensions to MVC for web development.
Html.BeginCollection Part of JJ.Framework.Mvc. Makes it possible to send tree structures over HTTP to the server-side MVC.
Html.BeginCollectionItem Alternative for JJ.Framework's Html.BeginCollection. Allows sending a collection over HTTP to server-side MVC, but not trees.

Win

WinForms Used in some projects: in small utilities and JJ.Synthesizer uses it as the top-most layer.
SimpleProcessForm Part of JJ.Framework.WinForms. A base user interface for a utility that runs a process.
JJ.Framework.VectorGraphics A custom-programmed vector graphics model. Can be used for component-based user interfaces.

Debugging / Testing

MSTest For automated / unit testing. Seems a deprecated framework. Might upgrade, but it ain't on the top of the list.
JJ.Framework.Testing Extends the Assert class, but automatically includes the tested expression in the error messages.
DebuggerDisplays A technique to quickly display helpful info in the watch screen of a programming environment.
JJ.Framework.Exceptions Contains Exception classes for basic errors. Clear concise error messages, that include tested expressions and tested values.
Accessor For accessing the internals of types for instance for testing purposes.

Processing / IO

JJ.Framework.Text Basic helpers for working with text.
JJ.Framework.IO Contains various file functions, functions for working with streams and working with CSV's.
JJ.Framework.HtmlToXml HtmlToXmlConverter class that steals from SgmlReader. It does what its name implies.
JJ.Framework.Xml A convenient way to map XML to (C#) classes.
Access XML nodes more safely, with null and uniqueness checks.
JJ.Framework.Xml.Linq "
Embedded Resources Embedded resources allow compiling files and content right inside a DLL or EXE.
EmbeddedResourceReader Makes it a little easier to get embedded resource Streams, bytes and strings.

Other

Localization

Resource Strings For localization, resx files can be used in Visual Studio.
JJ.Framework.ResourceStrings Reusable button texts and such in multiple languages. For now supports Dutch, US English and some broken Polish.
Localization More ideas about localization.

Configuration

JJ.Framework.Configuration For working with complex configuration files. Easier than System.Configuration.
Configuration More info about configuration.

Security

JJ.Framework.Security A generic interfacing for authenticating a user and yet to be tested hashed salted password authentication.
Security If more might be needed security-wise, it may be hidden behind generic interfaces, abstracting the security system.

Logging

JJ.Framework.Logging For now contains not much more than the ExceptionHelper class, which for instance converts Exception information to a string.
Logging More info how JJ.Framework.Logging might be extended to contain more code for logging.

back