我需要一些资源来讨论如何将软件设计为可扩展的,即让其他人可以编写添加功能的附加组件/插件.
您有什么推荐的吗?那里有讨论这个主题的书吗?
我更喜欢那些简短而重要的东西; 一点理论和一堆具体的例子.
我不是针对特定语言,我希望能够理解核心思想,以便我可以用任何语言实现它.
出于同样的原因,我宁愿不使用其他人构建的框架(除非框架不是非常高级,即不会隐藏太多),目前我只想教育自己主题和实验以各种方式实现它.此外,框架通常假定用户对该主题的了解.
UPDATE
我不是在询问OOP或者是否允许我的类被继承.我所说的是设计一个将部署在系统上的应用程序,以便在部署之后可以通过第三方附加组件进行扩展.
例如,Notepad ++有一个插件架构,您可以将.dll文件放在plugins文件夹中,并为不存在的应用程序添加功能,例如颜色选择或片段插入,或许多其他内容(广泛的功能).
有谁知道我可以在Visual Studio中运行PowerShell的方法.
我的意思是,在工具窗口中有一个交互式的PowerShell提示符?
善良,
担
我正在尝试编写一个插件系统来为我的应用程序提供一些可扩展性,这样有人可以为应用程序编写一个插件,而无需触及主应用程序的代码(并冒险破坏某些内容).
我已经写了基础"IPlugin"接口(atm,还没有实现)
这是我加载的方式:
public static void Load()
{
// rawr: http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx
String[] pluginFiles = Directory.GetFiles(Plugins.PluginsDirectory, "*.dll");
foreach (var plugin in pluginFiles)
{
Type objType = null;
try
{
//Assembly.GetExecutingAssembly().GetName().Name
MessageBox.Show(Directory.GetCurrentDirectory());
Assembly asm = Assembly.Load(plugin);
if (asm != null)
{
objType = asm.GetType(asm.FullName);
if (objType != null)
{
if (typeof(IPlugin).IsAssignableFrom(objType))
{
MessageBox.Show(Directory.GetCurrentDirectory());
IPlugin ipi = (IPlugin)Activator.CreateInstance(objType);
ipi.Host = Plugins.m_PluginsHost;
ipi.Assembly = asm;
}
}
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString(), "Unhandled Exception! (Please Report!)", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
}
}
}
Run Code Online (Sandbox Code Playgroud)
一位朋友试图提供帮助,但我真的不明白出了什么问题. …
我想提供一些在我的软件中创建动态可加载插件的方法.执行此操作的典型方法是使用LoadLibrary WinAPI函数加载DLL并调用GetProcAddress以获取指向该dll内的函数的指针.
我的问题是如何在C#/ .Net应用程序中动态加载插件?
我刚刚开始了一份新工作,我的新老板跟我谈过的一件事就是代码长寿.
我总是编码使我的代码具有无限的可扩展性和适应性.我想如果有人将来要改变我的代码那么应该很容易做到.
但我从来没有真正了解未来应该走多远.
因此,我的新老板告诉我,不要为未来3年的任何事情而烦恼,他的理由是技术变化,计划到期等.
起初我有点吃惊,认为他是一个打击工作,但我想的越久,我就越热衷于这个概念.
有没有其他人对你应该编写代码的未来有什么意见?
是否有将可扩展性功能编程到代码中的一般过程?
我想知道将扩展类型功能添加到您正在编写的系统的一般过程是什么,以便可以通过某种插件API扩展功能,而不必修改系统的核心代码.
这些事情往往取决于系统编写的语言,还是有一种通用的方法来允许这样做?
我显然对这些概念不熟悉.我只是不明白为什么你会限制对属性或方法的访问.您似乎只是根据预期结果编写代码.为什么要创建一个私有方法而不是简单地不调用该方法?它是用于迭代对象创建(如果我说的正确),多开发人员的情况(不要搞砸其他人的工作),或者只是因为你不会意外搞乱自己的工作?
有没有人有任何工具建议可以帮助将文字值移动到资源文件进行本地化?
我使用了一个名为RGreatX的resharper插件,但想知道是否还有其他东西.
这是一个很长的手动过程,让人们想要必须有更好的方法!RGreatX还可以,但我觉得可能有点滑.
vsx extensibility internationalization visual-studio winforms
我已经实现了一个自定义IParameterInspector
,我想让它为我的服务上的每一个操作执行.
我的理解是IParameterInspector
实现只能用于IOperationBehavior
实现,而实习IOperationBehavior
实现只能用于使用属性来装饰各个操作.
有谁知道我是否可以IParameterInspector
在服务级别注册我的方式,以便它可以执行服务中的所有操作?
在Node.js中,我能够使用EventEmitter轻松地创建一个WordPress克隆,从而将一个钩子系统复制并构建到CMS核心中,然后插件可以连接到该核心.
我现在需要为我的CMS写入并移植到Go的相同级别的可扩展性和核心隔离.基本上我现在已经完成了核心,但是为了使它真正灵活,我必须能够插入事件(钩子)并使插件附加到这些具有附加功能的钩子.
我不关心重新编译(动态/静态链接),只要你不必修改核心来加载插件 - 永远不应该修改CMS核心.(如WP,Drupal等)
我注意到有一些相当未知的项目,试图在Go中实现与Node.js中的EventEmitter类似的事件:
https://github.com/CHH/eventemitter
https://github.com/chuckpreslar/emission
由于上面的这两个项目没有得到太多人气和关注,我觉得这种思考事件的方式现在可能是我们应该如何在Go中做到这一点?这是否意味着Go可能不适合这项任务?通过插件制作真正可扩展的应用程序?
似乎Go没有将事件构建到其核心中,并且RPC似乎不是将插件集成到核心应用程序中的有效解决方案,就像它们本地构建一样,并且好像它们是主应用程序本身的一部分.
无缝插件集成到您的核心应用程序中的最佳方式是什么,无需扩展点(在核心中),而无需在每次需要连接新插件时操作核心?
extensibility ×10
plugins ×4
.net ×1
add-in ×1
c# ×1
class ×1
eventemitter ×1
go ×1
oop ×1
php ×1
powershell ×1
resources ×1
visibility ×1
vsx ×1
wcf ×1
windows ×1
winforms ×1