About ARX.SDK

Design Philosophy

Consistency without sacrificing developer control.

These principles guide ARX.SDK's architecture and development. They come from the experience described in The Story Behind ARX.SDK.

  1. Consistency Without Forcing Uniformity

    Common operations should have a familiar programming model, but provider-specific capabilities should not be hidden or unnecessarily restricted.

    ARX.SDK aims to make working with different data providers consistent without pretending that all databases work the same way.

  2. Developer Control

    The SDK should not dictate how an entire application must be designed or structured.

    Developers should retain control over their application architecture, data structures, queries, and database interactions.

    In practice Each table's id column is declared by the developer, once, at startup; ARX never guesses it: ArxSchemaCatalog.Create().Table("account", ArxIdColumn.Generated<long>("id")).Build()

  3. Metadata-Driven Interaction

    Entities and their attributes provide a structured way to represent and manipulate data.

    This approach provides a familiar programming experience while allowing applications to work with data in a consistent manner.

    In practice A record is an entity named after its table, and its data is a set of named attributes: var account = new ArxEntity("account"); account["name"] = "Northwind Traders";

  4. Provider Awareness

    Each database has its own characteristics, capabilities, and limitations.

    The abstraction should respect those differences rather than hide them behind an artificial universal model.

  5. Practical Engineering

    The SDK should be useful in real applications, not just theoretically elegant.

    Its design should be guided by actual development experience, maintainability, performance considerations, and practical use cases.

ARX.SDK is an evolving project. Its architecture and provider implementations will continue to grow as more database technologies and real-world use cases are supported.

The objective is not to create another restrictive framework, but to give developers a practical and consistent foundation for working with different data providers.