Skip to content

SAIF.Framework.Core dependencies

SAIF.Framework.Core is the repository's foundational library (frameworkDensity: 0) — other libraries depend on it, not vice versa. Despite this, Core itself is not dependency-free: it references several sibling libraries in the same repository and a set of external NuGet packages supporting its dual SQL/Oracle-SQL-Server and REST-API data-access models.

Internal dependencies

Dependency Type Usage
SAIF.Framework.Bindable Internal Project reference (..\SAIF.Framework.Bindable\SAIF.BOF.Framework.Bindable.csproj); bundled into the same NuGet package via IncludeReferencedProjects: true.
SAIF.Framework.Connection Internal Project reference (..\SAIF.Framework.Connection\SAIF.BOF.Framework.Connection.vbproj); imported via Imports SAIF.Framework.Connection, used by Core's data-access base classes (e.g. clsDataAccess).* See Configuration for the transitive ConnectInfo endpoint setting that backs Core's Oracle and SQL Server connection-string resolution.
SAIF.Framework.DNS Internal Project reference (..\SAIF.Framework.DNS\SAIF.BOF.Framework.DNS.csproj); bundled into the same NuGet package via IncludeReferencedProjects: true.
SAIF.Framework.Logging Internal Project reference (..\SAIF.Framework.Logging\SAIF.BOF.Framework.Logging.vbproj); imported via Imports SAIF.Framework.Logging, used by Core's data-access base classes.*
SAIF.Framework.Security.EnvironmentApi Internal Project reference (..\SAIF.Framework.Security.EnvironmentApi\SAIF.BOF.Framework.Security.EnvironmentApi.csproj); bundled into the same NuGet package via IncludeReferencedProjects: true. Core also reaches this dependency through AppGlobal.EnvironmentService for workCalendarServiceUrl; see Configuration for the direct key and required bootstrap settings.
SAIF.Framework.Security Internal Project reference (..\SAIF.Framework.Security\SAIF.BOF.Framework.Security.vbproj); imported via Imports SAIF.Framework.Security at the project level, though no call site within Core itself was found invoking a security/authorization API from it during this scan.**

External dependencies

Dependency Version Usage
Oracle.ManagedDataAccess 21.5.0 Oracle vendor ODP.NET managed driver, consumed by clsMSOracleDataLayer/clsMSOracleDataPortal/MSOracleDataRequest/MSOraclePortalRequest (V1\DataAccessLayer\MSOracle\); registered as a DbProviderFactories entry and an oracle.manageddataaccess.client custom config section in app.config.
RestSharp 106.12.0 REST client library underlying the API-oriented business-object model (V1\Api\): ApiClient/IApiClient, ApiRequest/IApiRequest, ApiResult/IApiResult, clsDataApiAccess/IDataApiAccess.
Newtonsoft.Json 13.0.3 JSON serialization dependency (excluded-prefix per dependency-resolution config, but noted as a direct package reference).
SAIF.Framework.Common 2.0.22074.3 Framework-inherited SAIF internal NuGet package (same-organization framework dependency, distinct from the same-repo project references above).
SAIF.Web.API.Clients 2.0.22307.1 Framework-inherited SAIF internal NuGet package, supporting the API-oriented business-object/REST client plumbing.
SAIF.Web.API.Core 2.0.22307.1 Framework-inherited SAIF internal NuGet package, supporting the API-oriented business-object/REST client plumbing.

Dependency risks and notes

  • V1/V2 rules engine coexistence: Two generations of the business rules engine — clsRulesManager (V1, V1\BusinessRules\) and RuleManager (V2, V2\BusinessRules\) — coexist in the same assembly. Every clsBusinessBase instance still owns a V1 clsRulesManager (m_Rules As New clsRulesManager, clsBusinessBase.vb:987); no code within Core was observed wiring V2 rule types into the base classes. This is a maintenance and clarity risk: consumers must know which engine (clsRulesManager vs. RuleManager) is actually active, and the presence of an unused/partially-adopted V2 surface increases the chance of divergence or accidental misuse.**
  • Parallel V1/V2 smart value types: Similarly, clsSmartString/clsSmartDate/clsSmartDecimal/clsSmartProperty (V1) coexist with SmartValue/SmartString/SmartDate/SmartDecimal/SmartInteger/ISmartValue (V2) in the same assembly, with V1 remaining the base classes' active integration point. This doubles the surface area consuming libraries must be aware of when choosing which smart-value types to use.*
  • Core is not a dependency-free leaf: Although architecturally foundational, Core has outbound project references and Imports on SAIF.Framework.Security, SAIF.Framework.Connection, SAIF.Framework.Logging, SAIF.Framework.DNS, SAIF.Framework.Security.EnvironmentApi, and SAIF.Framework.Bindable. This inverts the naive assumption that the "core" library has no repository-internal dependencies, and means changes to those sibling libraries can affect Core's build/behavior.*
  • Dual database driver support increases surface area: IDataLayer is implemented separately for Oracle (clsMSOracleDataLayer, on Oracle.ManagedDataAccess) and SQL Server (clsSQLDataLayer), each with parallel IDataPortal/IDataRequest/IPortalRequest implementations. Any change to the shared IDataLayer/IDataPortal contracts must be validated against both driver implementations.
  • API-and-DB hybrid model (clsBusinessApiCriteriaBase): RestSharp-based API business objects and SQL-based business objects share the same IBusinessCriteria/IBusinessApiCriteria contract hierarchy, with API criteria's SQL properties always empty by design. A future change to IBusinessCriteria risks inadvertently breaking the API path, which relies on the SQL properties never being populated.*
  • Packaging bundles the whole repository: Because the nuspec <file> glob (..\**\*.vb;..\**\*.cs, evaluated relative to the repository root) combined with IncludeReferencedProjects: true, the single NuGet package SAIF.BOF.Framework bundles compiled DLLs for Core's referenced projects plus raw source from every top-level library folder in the repository. Any library change anywhere in the repo can affect the contents of the package built from Core's project as the pack root.
  • No config-driven database connection info in Core: Connection strings/DB user/database name are supplied as constructor parameters to clsDataPortalInfo by calling code rather than resolved from ConfigurationManager.AppSettings/IEnvironmentService within Core itself; consumers are responsible for supplying and securing this information.

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with ** could not be confirmed; treat as unknown until verified.

Sources

  • SAIF.Framework.Core\SAIF.BOF.Framework.Core.vbproj
  • SAIF.Framework.Core\packages.config
  • SAIF.Framework.Core\nuget.config
  • SAIF.Framework.Core\SAIF.BOF.Framework.Core.nuspec
  • SAIF.Framework.Core\app.config
  • SAIF.Framework.Core\V1\BaseItems\clsBusinessBase.vb
  • SAIF.Framework.Core\V1\BusinessRules\clsRulesManager.vb
  • SAIF.Framework.Core\V2\BusinessRules\ (RuleManager and related types)
  • SAIF.Framework.Core\V1\SmartValues\ (clsSmartString, clsSmartDecimal, clsSmartDate, clsSmartProperty)
  • SAIF.Framework.Core\V2\SmartValues\ (SmartValue, SmartString, SmartDate, SmartDecimal, SmartInteger, ISmartValue)
  • SAIF.Framework.Core\V1\Api\clsBusinessApiCriteriaBase.vb
  • SAIF.Framework.Core\V1\DataAccessLayer\MSOracle\MSOracleDataLayer.vb
  • SAIF.Framework.Core\V1\DataAccessLayer\SQLServer\SQLDataLayer.vb
  • SAIF.Framework.Core\V1\DataAccessLayer\clsDataPortalInfo.vb
  • Pipelines\build-vars.yml