问题标签 [framework-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
12963 浏览

.net - MethodImplOptions.InternalCall 的意义何在?

BCL 中的许多方法都标有该 [MethodImpl(MethodImplOptions.InternalCall)]属性。这表明“方法是在公共语言运行时本身内实现的”。

以这种方式设计框架而不是指定运行时将被迫实现的显式 CIL 指令有什么意义?最终,该属性为运行时创建了合同义务,但在我看来,这种方式令人困惑,而且不是立即显而易见的。

例如,Math.Pow可以这样写(如果我的 C# + IL 和 IL 本身不好,请原谅我的非正式混合;这只是解释我的观点的一个示例):

而不是当前的方式:

为什么MethodImplOptions.InternalCall存在?

0 投票
2 回答
609 浏览

c# - 泛型集合继承

我正在使用 MVVM 构建一个 WPF 应用程序,并且正在使用 ObservableCollection。在我的 ViewModel 上工作时,我决定检查 ObservableCollection 的类型定义,我看到了一些我认为很奇怪的东西:

现在,问题来了:

这真的是它的实现方式还是这个 VS2010 对我耍花招?

0 投票
1 回答
504 浏览

c# - 为什么我可以在 C# 中锁定任何对象类型?

有人可以详细解释一下为什么可以lock在 C# 中使用任何类型的对象吗?

我了解lock它的用途和使用方法。我知道它如何扩展到Monitor.Enter/ Exit。我正在寻找对实现细节和设计注意事项的解释。

首先:引擎盖下发生了什么?例如:对象实例中是否有额外的位(如 RTTI/vtable 中的)使其工作?还是某种以对象引用为键的查找表?(如果是这样,这如何与 GC 交互?)或者其他什么?为什么我不必创建特定类型的实例来保存锁定数据?

(顺便说一下,在本机代码中做什么EnterExit映射到什么?)

其次,为什么.NET 设计为没有特定类型的用于取出锁定?(考虑到您通常只是new object()为了这个目的而做一个 - 并且大多数情况下您锁定“任何旧对象”都是有问题的。)这种设计选择是由实现细节所强迫的吗?还是故意的?而且,如果经过深思熟虑,这是一个不错的选择吗?(我意识到第二部分可能需要推测。)

0 投票
3 回答
256 浏览

ruby-on-rails - ActiveRecord::Base 背后的理论/基本原理

Rails 的初学者在这里。

你能帮我理解一下我看到的大多数代码示例的最顶端部分背后的理论吗?“ActiveRecord::Base”、“Application Controller”和“ActionController::Base”部分?

  1. 你怎么称呼这三个?它们都是对象吗?上课?

  2. 我知道'class X < ActiveRecord::Base' 是在模型中创建一个对象,而'class ApplicationController < ActionController::Base' 是在控制器中创建一个对象......所以有没有类似的东西来创建一个对象在视图中,只是为了对 MVC 的所有三个组件进行四舍五入?

0 投票
2 回答
1271 浏览

c# - 如何在可重用的 .NET 库上启用前向兼容性?

我正在为我的玩具项目创建一个新的次要版本。该项目在 NuGet 上发布,与 .NET 4.0 及更高版本兼容。我介绍的一些新功能需要 .NET 4.5(用户应该能够解析.NET 4.5IReadOnlyCollection<T>IReadOnlyList<T>引入的两个接口),但我需要保持项目与 .NET 4.0 兼容,因为并非所有开发人员可以轻松迁移到最新的 .NET 框架。

所以我面临的问题是如何解决这个“前向兼容性”问题。我想过两种解决方案,但都不是很有吸引力,所以希望任何人都可以在这里给我一些想法或指导。

这是我想出的两个解决方案:

解决方案 1:使用#if编译器指令并为每个 .NET 框架版本构建一个 DLL,并使用 NuGet 包发布这些版本并在项目站点下载。

这种方法的缺点是,当开发人员将他们的 Visual Studio 项目从 .NET 4.0 更新到 .NET 4.5 时,他们不会自动获得 .NET 4.5 版本(具有 .NET 4.5 的特定功能)。这违反了最小惊讶原则,并且当开发人员在几个月后尝试使用该功能时,他们会对为什么该功能不起作用感到茫然。

解决方案 2:使用单个 DLL 并即时发出类型,当它们存在于当前应用程序域中时,它们会实现这两个新接口。这允许向用户发送单个 DLL,并允许在开发人员在其项目中切换 .NET 框架版本时使用功能。这将使事情“正常工作”。这是我目前正在前进的方向。

由于我需要返回一个需要实现接口的类型,缺点是必须在运行时使用 Reflection.Emit、ModuleBuilder、TypeBuilder 等创建该类型。这是非常讨厌的shizzle。但除此之外,由于必须在新的(匿名)程序集中创建此类型,我必须将一些内部类型公开(需要继承的类型和需要实现的接口)。将这些内部类型公开会污染项目的 API,并且不允许我对这些类型进行更改。

我相信这些是我的选择,但我可能会遗漏一些明显的东西。所以我的问题是,我错过了一种可能性吗?有没有办法绕过解决方案 1 的问题,还是使用运行时类型发射的核心根会更好?

0 投票
1 回答
476 浏览

design-patterns - 了解 Asp.Net 身份界面设计策略

Asp.net Identity Framework 中提供的所有I*Store<TUser>接口都继承自IUserStore<TUser>. 这迫使每个接口的实现都实现与用户相关的方法或让单个类全部继承它们。

  • IUserClaimStore<TUser>
  • IUserPasswordStore<TUser>
  • IUserLoginStore<TUser>
  • IUserSecurityStampStore<TUser>

如果我需要为登录名或密码或声明或 SecurityStamps 提供不同的存储,例如 Xml 存储而不是 EF 或任何 DB,我还需要实现与用户相关的方法(用户:CreateAsync、UpdateAsync、DeleteAsync、FindByIdAsync、FindByNameAsync)。

那么,提供这种架构背后的策略是什么?

0 投票
1 回答
39 浏览

python - 使用简单函数(不是类方法)的“自我”参数的框架设计

我在工作中有一个框架(由被认为是我们组织中最有经验的程序员设计),它的结构是我见过的最奇怪的。该框架有很多 API,都具有相同的结构:

  • 每个 API(函数)都有一个“自我”参数,尽管它是一个简单的函数(不是类方法)
  • 这个'self'参数被添加到装饰器@incself中,实际上是对函数本身的引用
  • 在每个函数内部,所有参数都被转换为“self”对象的属性(= 函数的属性)
  • 然后,在整个函数代码中,参数以 self.arg1、self.arg2、... 的形式使用

由于显然我是唯一一个认为这很奇怪的人,请帮助我提出您的意见。你们中是否有人使用过/看到过类似的方法,它有什么可能的好处?

谢谢!

0 投票
1 回答
39 浏览

php - PHP 使用对象作为 var

亲爱的所有 PHP 开发人员。

我正在考虑在我的 PHP 框架上实现不同的方法。我试图寻找解决方案,但我无法得到我想要的。我有一个类属性。它有许多受保护的属性,其中之一是 $value。我的要求是,1. 我需要初始化 Object->$value 作为变量,2. 我需要访问 Object->$value 作为变量。我有以下代码供您参考:

属性.php

实现.php

我不确定这是一个好的方法还是我的方向很好。如果可能,需要您对这种方法或解决方案发表评论。

谢谢你们...

0 投票
3 回答
113 浏览

algorithm - 根据我的要求为歌曲播放站设计一个类的更好的数据结构是什么?

我必须为“公制”系统提出类和数据结构设计,以确定*乐队的顶级歌曲。

该类应该有两个 Web 服务调用

请指教!