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\) andRuleManager(V2,V2\BusinessRules\) — coexist in the same assembly. EveryclsBusinessBaseinstance still owns a V1clsRulesManager(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 (clsRulesManagervs.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 withSmartValue/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
ImportsonSAIF.Framework.Security,SAIF.Framework.Connection,SAIF.Framework.Logging,SAIF.Framework.DNS,SAIF.Framework.Security.EnvironmentApi, andSAIF.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:
IDataLayeris implemented separately for Oracle (clsMSOracleDataLayer, onOracle.ManagedDataAccess) and SQL Server (clsSQLDataLayer), each with parallelIDataPortal/IDataRequest/IPortalRequestimplementations. Any change to the sharedIDataLayer/IDataPortalcontracts 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 sameIBusinessCriteria/IBusinessApiCriteriacontract hierarchy, with API criteria's SQL properties always empty by design. A future change toIBusinessCriteriarisks 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 withIncludeReferencedProjects: true, the single NuGet packageSAIF.BOF.Frameworkbundles 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
clsDataPortalInfoby calling code rather than resolved fromConfigurationManager.AppSettings/IEnvironmentServicewithin Core itself; consumers are responsible for supplying and securing this information.
Related documentation¶
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.vbprojSAIF.Framework.Core\packages.configSAIF.Framework.Core\nuget.configSAIF.Framework.Core\SAIF.BOF.Framework.Core.nuspecSAIF.Framework.Core\app.configSAIF.Framework.Core\V1\BaseItems\clsBusinessBase.vbSAIF.Framework.Core\V1\BusinessRules\clsRulesManager.vbSAIF.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.vbSAIF.Framework.Core\V1\DataAccessLayer\MSOracle\MSOracleDataLayer.vbSAIF.Framework.Core\V1\DataAccessLayer\SQLServer\SQLDataLayer.vbSAIF.Framework.Core\V1\DataAccessLayer\clsDataPortalInfo.vbPipelines\build-vars.yml