我想使用服务层。但有一些问题。我将提供示例并让我们讨论。
假设在控制器存储函数中,我编写了错误的代码,例如我在那里进行了验证,我在那里也有模型,为该模型提供用户输入的属性并存储它。基本上我把所有东西都放在控制器里,这导致控制器很胖。现在,我们可以做两件事来解决这个问题。
1)将验证逻辑移动到验证类(简单),然后我们创建新的模型实例并为其设置属性并将其存储在数据库中(该逻辑现在位于控制器中,但我们将其带到模型中)。这样每当我们需要在另一个地方使用相同的东西时,我们就可以调用这个模型的函数。如果我们不这样做,我们就会一遍又一遍地重复这个逻辑。那么业务逻辑呢?让我们看看服务层中的业务逻辑。之后我们的控制器将如下所示:
public function store(Request $request)
{
DB::beginTransaction();
try{
$results = $this->transport_service->doLogic($request); //makes logic according to user data.
if($results) {
$storeData = Transport::storeTransportThisWay($results, $request); //then we use model's function..
}
DB::commit();
return response()->json(['success'=>'Transport type has been binded to column and its values successfully'], 200);
}catch(\Exception $e){
DB::rollback();
return response()->json(['error'=>'Something went wrong, please try later.'], 500);
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,我在模型中编写任何类型的查询。以及服务中的任何类型的业务逻辑。
第一个问题是:这是一个好方法吗?
2)我们可以做的是在控制器中调用服务的方法,在其中编写查询和业务逻辑。这是每个人都使用的方式。但问题是,如果我遵循这种方法,假设在服务的其中一个方法中,我编写了查询和业务逻辑。一切都很好。但假设在另一个中我也需要有相同的查询,但我不需要该业务逻辑。问题是我无法使用该服务的方法,因为它既有业务逻辑又有查询,而我只需要查询。所以问题是我还必须将查询放在其他地方,但不能放在服务的方法中,这给我们带来了另一个问题:在哪里放置该查询。我对吗?如果是,我的问题是为什么人们喜欢这种方法,而不是我提到的第一个方法?
很好的例子将不胜感激。
基本上,当我有一个组件时,我们将其称为“ TransportComponenet.vue”,在该组件中,我有一个data(),而我的属性是carId,transportId。vue所做的是使这些属性具有吸气剂和吸气剂。假设在这个componenet的观点中,我输入{{carId + transportId}}并且也是{{carId * transportId}}。
据我所知,Vue会进入我的视图,查看它们,无论我有吸气剂({{carId+ transportId}}或{{carId * transportId}})都是吸气剂。因此,vue到来并将它们注册在组件的观察程序中。当我在某个地方使用诸如setter之类的设置器时this.carId = 5。Vue为此属性执行setter函数,然后重新评估先前在观察器中保存的函数(getter)。这是正确的假设吗?
我不明白的是Dep类和Watcher类之间存在什么关系?我知道他们俩都扮演着重要角色。我真的很乐意整个解释“哪件事发生在何时何地以及为什么”。
我ionic cordova run android参加了离子科尔多瓦项目。这时,我的手机通过USB连接到PC。因此,当我运行该命令时,它将在我的真实设备android redmi note 6 PRO上安装该应用程序。但是真正发生的是,当应用打开时,仅出现白屏,什么也没有。首先,它显示启动屏幕,然后永远显示白屏。为什么会发生这种现象?我在某处阅读,我认为某些人由于离子4而有此问题。请帮助。
我要粘贴的pastebin链接,在单击应用程序以在android模拟器上打开该应用程序后显示logcat日志(它在android模拟器上也显示白屏)。
这里是。https://pastebin.com/nLiY8w0b
chrome调试器显示-https://pastebin.com/EzdyV3Tw
正如问题所暗示的,我无法弄清它们的含义以及为什么要使用它。据说可以使用它,以便当我们有很多组件并且想要将数据从父对象传递到孩子的孩子的孩子的组件时,我们不必使用道具。这是真的?
如果您能提供一个更简单的示例,那将是很好。Vue.js文档没有太多提及。
我已经阅读了很多关于 SPA 与 SSR 的内容,也许我了解它的真实想法,也可能不了解。我真的很感激有经验的人可以告诉我我的假设是否正确或有意义。
观察 1)
SPA -客户端请求 www.example.com,这从浏览器到服务器。服务器返回 index.html ,其中包含<div id="app"></div>javascript 文件的脚本源。浏览器再次对该捆绑的 js 文件发出另一个请求,服务器返回它。之后返回的 js 文件启动并开始执行。编译并完成后,页面将显示给用户。
SSR -客户端从浏览器向服务器请求 www.example.com。服务器完成所有事情,进行任何 api 调用或其他事情,将所有内容放在 html 中并返回 html。如果这些 html 有一些样式或其他 js 源,浏览器也会请求这些。
我的想法- 为什么 SSR 更快?是因为在SPA案例中,它必须下载整个网站的整个js文件吗?并且在 SSR 情况下,仅返回用户输入的特定页面的内容?
观察 2)
SPA - 如果页面已加载并且用户单击其他路由之一,则不会向服务器发出任何请求以获取 html 以将其显示给用户。所有路由的 js 都已经下载,所以不需要向服务器发出请求,除非有一个 Ajax 调用从数据库中获取一些动态数据。
SSR - 这将再次向服务器发出请求以获取新页面的 html 文件。
在这种情况下,我认为SPA 更快,即使 SPA 仍需要对某些数据发出 ajax 请求。对某些数据的 Ajax 请求似乎比下载新呈现的 html 的请求更快,后者也需要在服务器上调用 ajax。
我知道 SSR 对 SEO 有好处,但我只对性能感兴趣。你怎么认为?我说的一切都正确吗?
终于到了我理解这个概念的时候了,因为我仍然没有得到一些案例。
问题1)什么呢save()回报呢?它总是布尔值还是有时会抛出异常?
问题 2)我没有使用任何事件模型。所以我认为save()任何时候都不会返回false。那么它会返回true还是抛出异常?我对吗?
问题3)如果我有这样的事情:
DB::beginTransaction();
try{
$model1 = new Type();
$model1->test = 'great';
$model1->save();
$model2 = new Type();
$model2->test2 = 'awesome';
$model2->save();
DB::commit();
}catch(Exception $e){
DB::rollBack();
}
Run Code Online (Sandbox Code Playgroud)
是否有可能保存不会发生但它不会抛出异常?我在这些模型中没有任何事件。
问题 4)如果问题 3 的答案是“不,这是不可能的”,那么为什么我需要使用saveOrFail()
我真的很感激,因为我真的找不到任何能深刻解释我所问的东西。
我正在使用 vuetify 选项卡。
<VTabs
row
justify-end
show-arrows
slider-color="accent"
@change="changedTab"
>
<VTab key="btn1">Tab 1</VTab>
<VTab key="btn2">Tab 2</VTab>
<VTab key="btn3">Tab 3</VTab>
<VTab key="btn4">Tab 4</VTab>
<VTabItem key="panel1">
<SessionMapInformation
:data="data0"
></SessionMapInformation>
</VTabItem>
<VTabItem key="panel2">
<SessionMapInformation
:data="data1"
></SessionMapInformation>
</VTabItem>
<VTabItem key="panel3">
<SessionMapInformation
:data="data2"
></SessionMapInformation>
</VTabItem>
<VTabItem key="panel4">
<SessionMapInformation
:data="data3"
></SessionMapInformation>
</VTabItem>
</VTabs>
Run Code Online (Sandbox Code Playgroud)
SessionMapInformation 根据:data属性显示地图和标记。
问题是,更改选项卡之间的速度非常慢,有时如果:数据有点大,屏幕就会冻结。您会建议什么解决方法?
我正在尝试在我的index.html.
<script>
fetch('index1.js').then(response => {
caches.open('test-cache').then(cache => {
cache.put('index1.js', response);
})
})
</script>
Run Code Online (Sandbox Code Playgroud)
我在本地主机上有一个名为 的自定义域test-website.com。当我通过 Chrome 访问此页面时,一切都很好并index1.js存储在缓存中。现在,我打开ios Simulator并打开 Safari,然后再次运行同一个网站。我还在 mac safari 上检查了这个网站,但是在控制台中,这就是我得到的:
未处理的承诺拒绝:ReferenceError:找不到变量:缓存
问题 1)为什么会出现此错误?
问题2)我检查了兼容性:Cache Storage API和Cache。第一个与 兼容ios safari,第二个则不兼容。这2个有什么区别?这可能是它找不到缓存的原因吗?
问题 3) Apple 支持 Service Worker 并且它应该支持Cache API. 否则它就没有任何价值。任何想法?
我正在使用visibilitychange浏览器的事件。该网站适用于手机。所以我通过手机进行测试。
document.addEventListener('visibilitychange', (e) => {
console.log("visibility changed", e);
})
Run Code Online (Sandbox Code Playgroud)
这可能是由许多不同的原因引起的。
有什么方法可以检测什么行为导致visibilitychange监听器被调用?我尝试过e.target和e.srcElement,但在所有情况下,它们似乎都是相同的。有任何想法吗?
我想我可能问了一个非常错误的问题,但我确实尝试通过谷歌搜索来理解它,但没有运气。
众所周知,我们有栈和堆。动态分配的堆,局部变量的栈等
假设我有以下 C++ 代码。
void bla(int v1, int v2, int v3) {
int g = v1 + v2+ v3;
}
void nice(int g){
int z = 20;
int k = 30;
bla(g, z, k);
}
int main(){
cout<<"Hello World";
nice(40);
}
Run Code Online (Sandbox Code Playgroud)
现在,让我们想象有一个堆栈。据我所知,例如值z,k,g将存储在堆栈中。但是当我调用调用的函数时,这些nice存储bla在哪里?我读到每个函数执行都会导致调用堆栈大小增加 1。我想说,即使创建局部变量也会导致调用堆栈增加 1。
那么,那些( callstack, stack) 到底有什么关系呢?
这是我的假设:
当我们调用 时,就会创建nice全新的。stack在那里,我们存储z and k. 当nice调用时bla,现在stack会创建另一个堆栈bla并存储第二个堆栈v1,v2,v3,g。等等。每个函数都需要自己的callstack …