推荐多层架构/语言/数据库?
Recommend multi-tier architecture / language / database?
我正在查看新的业务线应用程序要求(技术,而不是会计)。该应用程序需要以下架构:
- 世界各地的用户都可以使用的后端数据库,响应时间不错。如有必要,可以使用数据库复制来确保低延迟性能。由于有关数据所有权的数据安全/合同问题,客户组织更愿意自己托管而不是使用 SaaS 或云。数据不是特别相关,更像是一个对象树。数据存储中可能存在具有在数据库中存在一次的属性的唯一对象。但是,需要存储所有数据更改的审计跟踪(不一定回滚),谁在何时进行更改,并允许用户可能查看混合数据集的不同版本的数据。对此的真实世界描述将是一张主图,上面有各种透明度,并有变化。当用户完成更改后,他们可以将更改发布回主服务器,然后其他人可以看到。查看各种数据库选项(SQL 通过 ORM,NoSQL)。平台无严格后端限制
- 业务逻辑的中间层,包括用户的身份验证和授权。 Auth 必须与客户端系统的 Active Directory 兼容。业务逻辑相对简单,将数据从数据库传递给用户并返回。对平台或语言没有限制——但理想情况下会喜欢可编写脚本的东西,这样就可以添加业务逻辑而无需重新编译。在被数百个并发用户击中时也需要良好的性能。
- 客户端层将主要 Windows 基于桌面,具有图形(绘图)和数据 entry/manipulation。 COM 层/与 MS Excel 的接口对业务至关重要,因此我认为这应该是一个 .NET 应用程序。
- 辅助客户端层最终将是移动/Web 界面。不具备 Windows 桌面应用程序的全部功能(无绘图界面),但具有审查/评论/批准数据并将数据发布到数据库中 "Master Layer" 的功能。
我不是全职程序员。但在过去的 25 年里,我用 FORTRAN、Common Lisp、Pascal、VB 和 Python 做过一些编程。我在这里可能被描述为创意人 - 而不是实施者。
如果我们想制作原型,最好的平台是什么?我在想,因为客户端,.NET 会很好,但我担心如果我们使用 SQL 以外的其他东西,后端使用 .NET 的能力(我对 LINQ 一无所知 - 可以这对我有帮助吗?)。另外,我真的很喜欢动态类型语言的想法,因为它们的表现力和开发速度。
考虑到低延迟和非关系类型的数据,NoSQL 将是正确的选择。许多流行的数据库对 .net(如 MongoDB、CouchBase)都有很好的支持,甚至对其 lambdas/expressions 和 LINQ 也有很好的支持。此外,您还必须考虑可能影响后端架构的最终一致性(无论您采用关系还是 NoSQL、复制或分片的方式)。
关于审计跟踪、版本控制和发布更改请看CQRS 和Event Sourcing 架构模式,它们很好地解决了此类问题。
对于客户端应用程序,我建议尝试使用 Xamarin。 (我认为它比 WPF 更好,因为它不像 WPF 那样专注于特定设备)这提供了对服务器和客户端应用程序使用相同的开发 platform/language 和更低 development/support 的主要好处成本。
关于桌面应用程序,我不确定 Xamarin 是否支持 COM,但如果不支持,您可以 share client code 并分离表示层。因此,您将拥有用于桌面 (Visual Studio) 和移动 (Xamarin)
的单独层
所有这些东西都可以使用 .net 制作,我在这里看到一个很棒的专家:为所有应用程序使用通用代码库。
我正在查看新的业务线应用程序要求(技术,而不是会计)。该应用程序需要以下架构:
- 世界各地的用户都可以使用的后端数据库,响应时间不错。如有必要,可以使用数据库复制来确保低延迟性能。由于有关数据所有权的数据安全/合同问题,客户组织更愿意自己托管而不是使用 SaaS 或云。数据不是特别相关,更像是一个对象树。数据存储中可能存在具有在数据库中存在一次的属性的唯一对象。但是,需要存储所有数据更改的审计跟踪(不一定回滚),谁在何时进行更改,并允许用户可能查看混合数据集的不同版本的数据。对此的真实世界描述将是一张主图,上面有各种透明度,并有变化。当用户完成更改后,他们可以将更改发布回主服务器,然后其他人可以看到。查看各种数据库选项(SQL 通过 ORM,NoSQL)。平台无严格后端限制
- 业务逻辑的中间层,包括用户的身份验证和授权。 Auth 必须与客户端系统的 Active Directory 兼容。业务逻辑相对简单,将数据从数据库传递给用户并返回。对平台或语言没有限制——但理想情况下会喜欢可编写脚本的东西,这样就可以添加业务逻辑而无需重新编译。在被数百个并发用户击中时也需要良好的性能。
- 客户端层将主要 Windows 基于桌面,具有图形(绘图)和数据 entry/manipulation。 COM 层/与 MS Excel 的接口对业务至关重要,因此我认为这应该是一个 .NET 应用程序。
- 辅助客户端层最终将是移动/Web 界面。不具备 Windows 桌面应用程序的全部功能(无绘图界面),但具有审查/评论/批准数据并将数据发布到数据库中 "Master Layer" 的功能。
我不是全职程序员。但在过去的 25 年里,我用 FORTRAN、Common Lisp、Pascal、VB 和 Python 做过一些编程。我在这里可能被描述为创意人 - 而不是实施者。
如果我们想制作原型,最好的平台是什么?我在想,因为客户端,.NET 会很好,但我担心如果我们使用 SQL 以外的其他东西,后端使用 .NET 的能力(我对 LINQ 一无所知 - 可以这对我有帮助吗?)。另外,我真的很喜欢动态类型语言的想法,因为它们的表现力和开发速度。
考虑到低延迟和非关系类型的数据,NoSQL 将是正确的选择。许多流行的数据库对 .net(如 MongoDB、CouchBase)都有很好的支持,甚至对其 lambdas/expressions 和 LINQ 也有很好的支持。此外,您还必须考虑可能影响后端架构的最终一致性(无论您采用关系还是 NoSQL、复制或分片的方式)。
关于审计跟踪、版本控制和发布更改请看CQRS 和Event Sourcing 架构模式,它们很好地解决了此类问题。
对于客户端应用程序,我建议尝试使用 Xamarin。 (我认为它比 WPF 更好,因为它不像 WPF 那样专注于特定设备)这提供了对服务器和客户端应用程序使用相同的开发 platform/language 和更低 development/support 的主要好处成本。
关于桌面应用程序,我不确定 Xamarin 是否支持 COM,但如果不支持,您可以 share client code 并分离表示层。因此,您将拥有用于桌面 (Visual Studio) 和移动 (Xamarin)
的单独层所有这些东西都可以使用 .net 制作,我在这里看到一个很棒的专家:为所有应用程序使用通用代码库。