我一直在思考一些关于osgi包中的包结构的"良好实践".目前,平均而言,我们每捆有8-12个班级.我的主动/建议之一是有两个包; com.company_name.osgi.services.api(用于api相关的类/接口(外部导出)和一个用于实现的包com.company_name.osgi.services.impl(未导出)).这有什么优点?还有其他建议吗?
我是Java 9的新手,正在通过YouTube上的Java模块化视频讲座.他们提到了模块化的3个好处 - 1.没有遗漏的依赖性2.没有循环依赖性3.没有拆分包.
据我所知,拆分包就是说应用程序依赖于多个依赖关系,让我们说包abc.pqr.xyz存在于更多的1个jar中.然后有可能从jar1中使用该包中的某些类,而从jar2中使用其他类.这可能会在运行时导致一些难以调试的问题.
视频说模块化解决了这个问题.但那是怎么回事?
假设有test.module1,它有以下模块信息 -
module test.module1{
exports abc.pqr.xyz;
}
Run Code Online (Sandbox Code Playgroud)
另一个模块2具有以下模块信息 -
module test.module2{
exports abc.pqr.xyz;
}
Run Code Online (Sandbox Code Playgroud)
现在让我们在我的应用程序中说我添加了这两个模块的依赖关系 -
module test.myapp{
requires test.module1;
requires test.module2;
}
Run Code Online (Sandbox Code Playgroud)
现在我又有2个模块化依赖项,其中有些类可能会出现在这两个模块中.那么在运行时如何解决从哪个模块中获取类定义?Java 9如何避免拆分包问题?
刚刚在"你使用什么JS lib"民意调查中看到了这个评论
"@Xanti - 是的,是的,编程中的模块化和抽象是一种可怕的做法.调用其他函数的函数?浪费."
这让我很好奇,因为我正在使用Kohana框架为PHP和Jquery库的javascript.
为什么有些人会考虑抽象和模块化的不良做法?是不是为简化和加快开发而制定的框架和库?
这是投票的链接
我是一名计算机科学专业的学生,我刚刚开始为我的课程编写相对较大的课程(750到1500行之间).到目前为止,可以通过任何合理水平的模块化和面向对象设计来实现.但是,现在我正在为我的作业编写更复杂的代码,我想学习编写更好的代码.
在设计程序的架构时,有没有人能指出我的方向来学习在寻找什么样的东西,以便你可以尽可能模块化?
在 Android 原生上分离每个应用程序功能,构建项目,实现架构组件并使其更容易在团队中工作,您可以使用模块化,这样每个人都可以通过只专注于模块来专注于各自的工作。如果我想使用 3 个应用程序功能(登录、注册、配置文件)的示例制作一个 Flutter 应用程序,并希望为每个功能实现模块化以使其更易于团队合作。你如何实现模块化?是否有参考其模块化 Flutter 的最佳实践?因为如果在 Android Native 上已经有很多相关的文章了,而我在检查 Flutter 时还没有找到。
我一直在尝试模块化我的 React.js 应用程序(它将作为带有 Electron 的桌面应用程序交付),如果我将来创建一个新模块,我只需添加一个新文件夹并修改一个几个文件,它应该可以很好地集成。我最初受到这篇文章的启发:https : //www.nylas.com/blog/react-plugins/
在那之后,我开始尽可能多地进行研究,最终创建了一个 JSON 文件,该文件将存在于服务器中,其中包含为该特定客户端注册的插件清单。像这样的东西:
{
"plugins": [
{
"name": "Test Plugin",
"version": "0.0.1",
"path": "testplugin",
"file": "test",
"component":"TestPlugin"
},
{
"name": "Another Plugin",
"version": "0.0.1",
"path": "anothertest",
"file": "othertest",
"component":"TestPluginDeux"
}
]
}
Run Code Online (Sandbox Code Playgroud)
之后,我创建了几个与path值匹配的文件夹,其中包含一个与清单中的名称匹配的组件(例如testplugin/test.jsx,将TestPlugin组件导出为默认值)。我还制作了一个pluginStore文件,用于读取清单并将插件安装在this.state.
然后,在谷歌和这里做了大量研究并找到了这个答案:React - Dynamically Import Components
使用该函数,我能够遍历清单,找到目录中的文件夹,并this.state通过运行mountPlugins()我在主页中pluginStore的componentDidMount()方法中创建的函数来安装插件。
到现在为止还挺好。我使用的阵营,路由器和我能够在国家动态地安装插件,并能够通过只要求他们这样加载它们在我的主页路线:<TestPlugin />。
我现在遇到的问题是,我想动态创建路由,通过使用component或render方法从状态加载这些组件,但我没有运气。我总是会得到相同的结果......显然我传递的是一个对象而不是一个字符串。
这是我在这次尝试中的最后一次迭代:
{this.state.modules.registered.map((item) =>
<Route exact …Run Code Online (Sandbox Code Playgroud) 我目前正在致力于模块化我的应用程序,因此我将每个功能放入库模块中。在我的一项功能中,我访问版本代码和名称。但是,尽管我在特定于该模块的 build.gradle 文件中定义了它们
它们不存在于生成的 BuildConfig 文件中
我无法引用原始:app模块的 BuildConfig 文件,因为我不能让我的功能模块依赖于该模块。
是否有其他方法可以从库模块访问此信息?
我有一个包含使用 emscripten 生成的库的应用程序。我正在使用标志编译它们:
-s MODULARIZE=1 -s EXPORT_NAME=\"'SomeModuleName'\"
Run Code Online (Sandbox Code Playgroud)
但是,库 FS 不再可用。当我在没有标志的情况下进行编译时,我可以在任何其他脚本中使用库 FS。
是否可以在我的模块中导出 FS?
在我的应用程序中,我有两个模块:app和repository。
repository依赖于 Room,并且有一个GoalRepository接口:
interface GoalRepository
Run Code Online (Sandbox Code Playgroud)
和一个GoalRepositoryImpl内部类,因为我不想将它或 Room 依赖项暴露给其他模块:
@Singleton
internal class GoalRepositoryImpl @Inject constructor(private val dao: GoalDao) : GoalRepository
Run Code Online (Sandbox Code Playgroud)
app取决于repository获取一个GoalRepository实例。目前,
我有一个:GoalRepositoryModule
@Module
class GoalRepositoryModule {
@Provides
@Singleton
fun provideRepository(impl: GoalRepositoryImpl): GoalRepository = impl
@Provides
@Singleton
internal fun provideGoalDao(appDatabase: AppDatabase): GoalDao = appDatabase.goalDao()
@Provides
@Singleton
internal fun provideDatabase(context: Context): AppDatabase =
Room.databaseBuilder(context, AppDatabase::class.java, "inprogress-db").build()
}
Run Code Online (Sandbox Code Playgroud)
问题是这不会编译(显然),因为公共provideRepository函数正在公开GoalRepositoryImpl,即一个internal类。
如何构建我的 Dagger …
我试图模块化一个冗长的if..else功能.
$condition = "$a < $b";
if($condition)
{
$c++;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将文字字符串翻译成逻辑表达式?
我正在尝试写一个书店程序,我在我的函数实现的源代码文件中收到一条错误"多重定义".
这是我的Book.c文件:
#include "Book.h"
void scanBook(book_t* bk) //error here
{
//implementation here
}
Run Code Online (Sandbox Code Playgroud)
这是我的Book.h文件:
#pragma once
#include <stdio.h>
typedef char* str;
typedef enum Genre {Education, Business, Novel} genre_t;
typedef struct Book{
str ISBN;
str title;
str author;
float price;
int quantity;
genre_t genre;
} book_t;
void scanBook(book_t* bk);
Run Code Online (Sandbox Code Playgroud)
这是我的main.c文件:
#include "Book.h"
#include "Book.c"
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该错误发生在Book.c中的scanBook函数但我不知道为什么,因为我包括头文件以及#pragma一次,并在头文件中我声明了该函数.它说'scanBook'和obj\Debug\Book.o ....的多个定义首先在这里定义.
任何帮助或澄清将不胜感激!
modularization ×12
android ×2
java ×2
abstraction ×1
browser ×1
c ×1
c++ ×1
conditional ×1
dagger ×1
dagger-2 ×1
emscripten ×1
export ×1
flutter ×1
fs ×1
if-statement ×1
java-9 ×1
javascript ×1
modularity ×1
oop ×1
osgi ×1
php ×1
react-router ×1
reactjs ×1